【发布时间】:2018-04-30 15:53:20
【问题描述】:
我正在绘制一个带有 6 组轴的图,每组轴都有来自 2 个 Pandas 数据帧之一的一系列 3 行(每列 1 行)。
我一直在用matplotlib .plot:
import pandas as pd
import matplotlib.pyplot as plt
idx = pd.DatetimeIndex(start = '2013-01-01 00:00', periods =24,freq = 'H')
df1 = pd.DataFrame(index = idx, columns = ['line1','line2','line3'])
df1['line1']= df1.index.hour
df1['line2'] = 24 - df1['line1']
df1['line3'] = df1['line1'].mean()
df2 = df1*2
df3= df1/2
df4= df2+df3
fig, ax = plt.subplots(2,2,squeeze=False,figsize = (10,10))
ax[0,0].plot(df1.index, df1, marker='', linewidth=1, alpha=1)
ax[0,1].plot(df2.index, df2, marker='', linewidth=1, alpha=1)
ax[1,0].plot(df3.index, df3, marker='', linewidth=1, alpha=1)
ax[1,1].plot(df4.index, df4, marker='', linewidth=1, alpha=1)
fig.show()
一切都很好,matplotlib 会自动为每条线循环使用不同的颜色,但对每个图使用相同的颜色,这正是我想要的。
但是,现在我想为线条指定更多细节:为每条线选择特定的颜色,和/或更改每条线的线条样式。
This link 展示了如何将多个线型传递给 Pandas 绘图。例如使用
ax = df.plot(kind='line', style=['-', '--', '-.'])
所以我需要:
- 将样式列表传递给我上面的子图命令,但
style无法识别,并且它不接受linestyle或color的列表。有没有办法做到这一点? 或 -
使用
df.plot:fig, ax = plt.subplots(2,2,squeeze=False,figsize = (10,10)) ax[0,0] = df1.plot(style=['-','--','-.'], marker='', linewidth=1, alpha=1) ax[0,1] = df2.plot(style=['-','--','-.'],marker='', linewidth=1, alpha=1) ax[1,0] = df3.plot( style=['-','--','-.'],marker='', linewidth=1, alpha=1) ax[1,1] = df4.plot(style=['-','--','-.'], marker='', linewidth=1, alpha=1) fig.show()
...但是随后将每个图绘制为单独的图形。我看不到如何将多个 Pandas 图放在同一个图上。
我怎样才能使这两种方法都起作用?
【问题讨论】:
-
能否提供minimal reproducible example。从你展示的不完整的代码片段来看,你似乎只是在绘制相同的日期帧 3 次(这没有多大意义,对吧?)
-
是的,我很抱歉。我试图简化代码并完成了它。 df1 和 df2 是
dicts的dataframes,所以每个情节都是不同的。我会花时间做一个更完整的例子 -
@ImportanceOfBeingErnest 我已经更新了这个问题 - 希望是最小的、完整的和可验证的
-
对不起,我现在在下面的答案中采用了旧示例。现在我懒得把它改成新的例子了。我猜原理是一样的。
标签: pandas matplotlib plot