如何在每个月的10天之间用条形图绘制图表?

时间:2019-05-12 20:18:35

标签: python python-3.x matplotlib

我有桌子:

import pandas as pd

df = pd.DataFrame([
("2018-06-10", 10),
("2018-07-10", 25),
("2018-08-10", 40),
("2018-09-10", 52),
("2018-10-10", 65),
("2018-11-10", 78),
("2018-12-10", 98),
("2019-01-10", 122),
("2019-02-10", 132),
("2019-03-10", 150),
("2019-04-10", 165),
("2019-05-10", 177)],
columns=["date", "values"])

我需要使用以下内容在matplotlib中绘制条形图:

  1. 酒吧将位于每月的10日之间;

  2. 每个小节的高度将等于表中相邻值的差。

要使图表看起来像这样:

Example of desired chart

2 个答案:

答案 0 :(得分:1)

尝试一下:

df["diff"]=df["values"].diff()

df.plot(kind="bar",x="date",y="diff")

plt.show()

答案 1 :(得分:1)

您要避免使用“值”作为列名,因为我认为这在pandas中为所有寄存器保留。因此,如果您执行df.values,那么您将获得更多,而仅此列。您可能还希望日期是垂直的,所以我在“ plt.xticks”中添加了rotation =“ vertical”,但如果没有,则可以将其删除。

这对我有用,请告诉我您是否有任何问题。

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

df = pd.DataFrame([ 
("2018-06-10", 10), 
("2018-07-10", 25), 
("2018-08-10", 40), 
("2018-09-10", 52), 
("2018-10-10", 65), 
("2018-11-10", 78), 
("2018-12-10", 98), 
("2019-01-10", 122), 
("2019-02-10", 132), 
("2019-03-10", 150), 
("2019-04-10", 165), 
("2019-05-10", 177)], 
columns=["date", "value"]) 

objects = df.date 
y_pos = np.arange(len(objects)) 
performance = list(df.value.diff().dropna())+[0]

plt.bar(y_pos, performance, 1, align='edge', alpha=0.5) 
plt.xticks(y_pos, objects, rotation="vertical") 
plt.ylabel('Usage') 
plt.title('Programming language usage') 

plt.show()

已编辑,没有看到您提到需要区别的部分。我还把这些酒吧放在一起(我认为您也需要?),并将日期推到最后。