我正在尝试绘制键盘中每个键的使用情况,并按键盘侧面进行分类。
为此,我得到了一长串文本,我计算了每个字母的值,然后将其放入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”)。
有什么想法吗?
答案 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()
答案 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
)