Python pandas, варианты построения нескольких строк
Я хочу построить несколько строк из фрейма pandas и задать разные параметры для каждой строки. Я хотел бы сделать что-то вроде
testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['s-','o-','^-'],color=['b','r','y'],linewidth=[2,1,1])
Это вызовет некоторые сообщения об ошибках:
-
Ширина линии не может быть вызвана со списком
-
В стиле я не могу использовать 's' и 'o' или любой другой алфавитный символ, определяя цвета в списке
Также есть еще несколько вещей, которые кажутся мне странными
-
когда я добавлю еще одну команду построения в вышеприведенный код testdataframe[0].plot()
, она построит эту строку в том же сюжете, если я добавлю команду testdataframe[[0,1]].plot()
, она создаст новый график
-
Если бы я назвал testdataframe[0].plot(style=['s-','o-','^-'],color=['b','r','y'])
, это прекрасно со списком в стиле, но не со списком в цвете
Надеюсь, кто-то может помочь, спасибо.
Ответы
Ответ 1
Ты так близко!
Вы можете указать цвета в списке стилей:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
testdataframe = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
styles = ['bs-','ro-','y^-']
linewidths = [2, 1, 4]
fig, ax = plt.subplots()
for col, style, lw in zip(testdataframe.columns, styles, linewidths):
testdataframe[col].plot(style=style, lw=lw, ax=ax)
Также обратите внимание, что метод plot
может принимать объект matplotlib.axes
, поэтому вы можете сделать несколько вызовов, подобных этому (если хотите):
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
testdataframe1 = pd.DataFrame(np.arange(12).reshape(4,3), columns=['A', 'B', 'C'])
testdataframe2 = pd.DataFrame(np.random.normal(size=(4,3)), columns=['D', 'E', 'F'])
styles1 = ['bs-','ro-','y^-']
styles2 = ['rs-','go-','b^-']
fig, ax = plt.subplots()
testdataframe1.plot(style=styles1, ax=ax)
testdataframe2.plot(style=styles2, ax=ax)
В этом случае не очень практично, но концепция может пригодиться позже.
Ответ 2
С учетом кадра данных testdataframe
testdataframe = pd.DataFrame(np.arange(12).reshape(4,3))
print(testdataframe)
0 1 2
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
Вы можете объединить styles
в один список строк, как в styles
, определенный ниже. Я также определяю ширину линий в lws
styles=['bs-', 'ro-', 'y^-']
lws = [2, 1, 1]
Мы можем использовать метод plot
на testdataframe
, передавая список styles
параметру style
. Обратите внимание, что мы могли бы также передать словарь (и, возможно, другие вещи).
Однако ширина строк не так легко обрабатывается. Сначала я захватываю объект AxesSubplot
и перебираю атрибут линий, задающий ширину линии.
ax = testdataframe.plot(style=styles)
for i, l in enumerate(ax.lines):
plt.setp(l, linewidth=lws[i])
![введите описание изображения здесь]()
Ответ 3
Итак, я думаю, что ответ заключается в передаче цвета и стиля в том же аргументе. Следующий пример работает с pandas 0.19.2:
testdataframe=pd.DataFrame(np.arange(12).reshape(4,3))
testdataframe.plot(style=['r*-','bo-','y^-'], linewidth=2.0)
К сожалению, кажется, что передача нескольких строк в качестве входа в matplotlib невозможна.