Pandas .p​​lot()方法不会在条形图中采用指定的颜色

时间:2020-08-03 13:18:17

标签: python pandas matplotlib

我正在尝试绘制键盘中每个键的使用情况,并按键盘侧面进行分类。

为此,我得到了一长串文本,我计算了每个字母的值,然后将其放入pandas.DataFrame()。

DataFrame具有这种结构

    kp
e   12.534045
a   12.167107
o   9.238939
s   7.103866
n   6.470274

我正在与

密谋
# Lazy definition of left_side and right_side of the keyboard
left_side  = [l for l in 'qwertasdfgzxcvb']
right_side = [l for l in 'yuiophjklñnm,.-'] 

# Plot the graph
df.plot(
    kind = 'bar',
    figsize = (10,5),
    color = ['r' if letter in left_side else 'b' for letter in df.index]
)

但是,这将导致所有红色条形图出现。我检查了一下,生成的带有列表理解的列表实际上就是它应该的样子(根据键盘上的位置,列出“ r”和“ b”)。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我没有发现df.plot()中定义的颜色出了什么问题。但是我发现可以和plt.bar()一起工作。

import pandas as pd
import matplotlib.pyplot as plt


data = {'kp': [12.534045, 12.167107, 9.238939, 7.103866, 6.470274]}
df = pd.DataFrame(data, columns=['kp'], index=['e','a','o','s','n'])

left_side  = [l for l in 'qwertasdfgzxcvb']
right_side = [l for l in 'yuiophjklñnm,.-'] 

color_list = ['r' if letter in left_side else 'b' for letter in df.index]

plt.bar(df.index, df['kp'], color=color_list)

plt.show()

enter image description here

答案 1 :(得分:0)

colors指的是列的颜色(您只有一列,因此仅使用第一个“ r”),一种解决方案是将其分成两个熊猫列,绘制堆叠的条形以将事物放置在正确的位置: >

left_side  = [l for l in 'qwertasdfgzxcvb']
right_side = [l for l in 'yuiophjklñnm,.-'] 

df['kpl'] = [x[1] if x[0] in (left_side) else None for x in zip(df.index, df.kp)]
df['kpr'] = [x[1] if x[0] in (right_side) else None for x in zip(df.index, df.kp)]

# Plot the graph
df[['kpl', 'kpr']].plot(
    kind = 'bar',
    figsize = (10,5),
    color = ['r', 'b'],
    stacked=True
)

enter image description here