【发布时间】:2023-03-06 04:27:01
【问题描述】:
这是我的一个数据框:
d = {'year': [2020,2020,2020,2021,2020,2020,2021],
'month': [10, 11,12,1,11,12,1],
'class':['A','A','A','A','B','B','B'],
'val1':[2,3,4,5,1,1,1],
'val2':[3,3,3,3,2,3,5]}
df = pd.DataFrame(data=d)
输出:
year month class val1 val2
0 2020 10 A 2 3
1 2020 11 A 3 3
2 2020 12 A 4 3
3 2021 1 A 5 3
4 2020 11 B 1 2
5 2020 12 B 1 3
6 2021 1 B 1 5
我需要随着时间的推移以不同的颜色(比如绿色和红色)绘制 val1 和 val2。还有两个类 A 和 B,我想用不同的线型(实线和虚线)绘制这两个类。所以如果类是 A,那么 val1 在图中可能是纯绿色,如果类是 B,那么 val1 在图中可能是绿色虚线。如果 class 是 B,那么 val2 在图中可能是纯红色,如果 class 是 B,那么 val2 在图中可能是红色虚线。
但是我遇到了需要解决的时间(x 轴)问题。首先,时间在不同的列(年和月)中,并且两个类的行数不同。在上面的数据中,B 类直到 2020 年 11 月才开始。
我尝试解决这个问题是使用年份和月份创建新索引:
df.index=df['year']+df['month']/12
df.groupby('class')['val1'].plot(legend='True')
plt.show()
但这会在 x 轴上创建不理想的刻度标签(我想我可以稍后重命名)。虽然它区分了这两个类,但它并没有按照我想要的方式进行。我也不知道如何在图中添加更多列。请指教。谢谢
【问题讨论】:
标签: python pandas matplotlib seaborn