Jar*_*rad 7 python plot matplotlib pandas
如何仅使用熊猫数据框方法绘制条形图的条形图不同颜色plot
?
如果我有这个 DataFrame:
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
index count
0 0 3372
1 1 68855
2 2 17948
3 3 708
4 4 9117
Run Code Online (Sandbox Code Playgroud)
df.plot()
我需要设置什么参数,以便图中的每个条形:
我正在尝试什么:
df.plot(x='index', y='count', kind='bar', label='index', colormap='Paired', use_index=False)
Run Code Online (Sandbox Code Playgroud)
结果:
我已经知道的(是的,这是可行的,但同样,我的目的是弄清楚如何df.plot
只用它来做到这一点。肯定有可能吗?):
def f(df):
groups = df.groupby('index')
for name,group in groups:
plt.bar(name, group['count'], label=name, align='center')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
没有任何参数可以传递给df.plot
单个列的不同颜色的条。
由于不同列的条形颜色不同,一个选项是在绘图之前转置数据框,
ax = df.T.plot(kind='bar', label='index', colormap='Paired')
Run Code Online (Sandbox Code Playgroud)
现在,这会将数据绘制为子组的一部分。因此,需要应用一些调整来正确设置限制和 xlabels。
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
ax = df.T.plot(kind='bar', label='index', colormap='Paired')
ax.set_xlim(0.5, 1.5)
ax.set_xticks([0.8,0.9,1,1.1,1.2])
ax.set_xticklabels(range(len(df)))
plt.show()
Run Code Online (Sandbox Code Playgroud)
虽然我猜这个解决方案符合问题的标准,但使用plt.bar
. 一次调用plt.bar
就足够了
plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))
Run Code Online (Sandbox Code Playgroud)
完整代码:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
plt.bar(range(len(df)), df["count"], color=plt.cm.Paired(np.arange(len(df))))
plt.show()
Run Code Online (Sandbox Code Playgroud)
您可以根据需要使用参数为每一列着色color
。
例如(例如,有 3 个变量):
df.plot.bar(color=['C0', 'C1', 'C2'])
Run Code Online (Sandbox Code Playgroud)
注意:'C0', 'C1', ...'
上面提到的字符串是matplotlib中内置的快捷颜色句柄。它们表示活动配色方案中的第一个、第二个、第三个默认颜色,依此类推。事实上,它们只是一个示例,您可以使用 RGB 代码或任何其他颜色约定轻松使用任何自定义颜色。
您甚至可以突出显示特定列,例如,此处的中间列:
df.plot.bar(color=['C0', 'C1', 'C0'])
Run Code Online (Sandbox Code Playgroud)
要在给定的示例代码中重现它,可以使用:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame({'count': {0: 3372, 1: 68855, 2: 17948, 3: 708, 4: 9117}}).reset_index()
ax = df.T.plot(kind='bar', label='index', color=['C0', 'C1', 'C2', 'C3', 'C4'])
ax.set_xlim(0.5, 1.5)
ax.set_xticks([0.8,0.9,1,1.1,1.2])
ax.set_xticklabels(range(len(df)))
plt.show()
Run Code Online (Sandbox Code Playgroud)
不同颜色的示例:
任意重复颜色的示例:
参考链接:在熊猫中分配线条颜色