如何在一个具有相同颜色但不同线条样式的图形中绘制两个pandas DataFrame?

GoC*_*rry 4 python matplotlib dataframe pandas

假设我有以下两个数据帧:

df1 = pd.DataFrame(np.random.randn(100, 3),columns=['A','B','C']).cumsum()
df2 = pd.DataFrame(np.random.randn(100, 3),columns=['A','B','C']).cumsum()
Run Code Online (Sandbox Code Playgroud)

df2情节

df1情节

我的问题是,如何在一个图中绘制它们,以便:

  1. 三个系列的df1和df2仍然是如上所述的蓝色,橙色和绿色线.
  2. df1的三个系列是实线
  3. 三个系列的df1是虚线

目前我最接近的是以下内容:

ax = df1.plot(style=['b','y','g'])
df2.plot(ax=ax, style=['b','y','g'], linestyle='--')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有没有办法获取DataFrame.plot()默认使用的颜色代码?或者还有其他更好的方法来实现我想要的吗?理想情况下,我不想style使用参数指定任何颜色代码,但始终使用默认颜色.

Sco*_*ton 6

您可以使用get_color以下行:

df1 = pd.DataFrame(np.random.randn(100, 3),columns=['A','B','C']).cumsum()
df2 = pd.DataFrame(np.random.randn(100, 3),columns=['A','B','C']).cumsum()

ax = df1.plot()
l = ax.get_lines()
df2.plot(ax=ax, linestyle='--', color=(i.get_color() for i in l))
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述


Imp*_*est 6

在不弄乱颜色本身或将它们从一个绘图转移到另一个绘图的情况下,您可以轻松地重置绘图命令之间的颜色循环

ax = df1.plot()
ax.set_prop_cycle(None)
df2.plot(ax=ax, linestyle="--")
Run Code Online (Sandbox Code Playgroud)


ALo*_*llz 5

您可以从matplotlib获取当前正在使用的默认颜色参数.

import matplotlib.pyplot as plt
colors = list(plt.rcParams.get('axes.prop_cycle'))

[{'color': '#1f77b4'},
 {'color': '#ff7f0e'},
 {'color': '#2ca02c'},
 {'color': '#d62728'},
 {'color': '#9467bd'},
 {'color': '#8c564b'},
 {'color': '#e377c2'},
 {'color': '#7f7f7f'},
 {'color': '#bcbd22'},
 {'color': '#17becf'}]
Run Code Online (Sandbox Code Playgroud)

所以只是通过style=['#1f77b4', '#ff7f0e', '#2ca02c'],颜色应该工作.

如果你想设置另一个颜色循环器,比如旧版本,那么:

plt.rcParams['axes.prop_cycle'] = ("cycler('color', 'bgrcmyk')")
list(plt.rcParams['axes.prop_cycle'])
#[{'color': 'b'},
# {'color': 'g'},
# {'color': 'r'},
# {'color': 'c'},
# {'color': 'm'},
# {'color': 'y'},
# {'color': 'k'}]
Run Code Online (Sandbox Code Playgroud)