python - Matplotlib 在条形图中删除数据
问题描述
我有一个简单的条形图,我想在 matplotlib 中制作。它绘制了过去几个月的使用情况。我遇到的问题是月份列表和月份的使用都是 13 的长度。情节不断出现,只有 12 条。
在循环之外
month_names = []
for i in range(13):
last_month = datetime.now() - relativedelta(months=i)
# Create string of month name and year...
text = format(last_month, '%b')
month_names.append(text)
month_names.reverse()
在循环内部(我知道像这样迭代 df 通常是不可以的,但我有特定原因超出了这个问题的范围)
month_1 = df.at[i, 'cwat01'] if df.at[i, 'cwat01'] != '' else 0
month_2 = df.at[i, 'cwat02'] if df.at[i, 'cwat02'] != '' else 0
month_3 = df.at[i, 'cwat03'] if df.at[i, 'cwat03'] != '' else 0
month_4 = df.at[i, 'cwat04'] if df.at[i, 'cwat04'] != '' else 0
month_5 = df.at[i, 'cwat05'] if df.at[i, 'cwat05'] != '' else 0
month_6 = df.at[i, 'cwat06'] if df.at[i, 'cwat06'] != '' else 0
month_7 = df.at[i, 'cwat07'] if df.at[i, 'cwat07'] != '' else 0
month_8 = df.at[i, 'cwat08'] if df.at[i, 'cwat08'] != '' else 0
month_9 = df.at[i, 'cwat09'] if df.at[i, 'cwat09'] != '' else 0
month_10 = df.at[i, 'cwat10'] if df.at[i, 'cwat10'] != '' else 0
month_11 = df.at[i, 'cwat11'] if df.at[i, 'cwat11'] != '' else 0
month_12 = df.at[i, 'cwat12'] if df.at[i, 'cwat12'] != '' else 0
month_13 = df.at[i, 'cwat13'] if df.at[i, 'cwat13'] != '' else 0
months = [month_1,
month_2,
month_3,
month_4,
month_5,
month_6,
month_7,
month_8,
month_9,
month_10,
month_11,
month_12,
month_13]
情节(也在循环内)
fig = plt.figure(figsize=(4, 1.2))
plt.rcParams.update({'font.size': 4})
plt.bar(month_names, months, color='grey', width = .5)
plt.ylabel('Gallons')
plt.xlabel('Month')
plt.rcParams["font.family"] = "Times New Roman"
ax = plt.axes()
ax.yaxis.grid()
imgdata = BytesIO()
fig.savefig(imgdata, format='svg')
imgdata.seek(0) # rewind the data
drawing = svg2rlg(imgdata)
renderPDF.draw(drawing, the_statement.canvas, 15, 210)
plt.close()
编辑:结果图
解决方案
通过更改最后一个条的颜色,我发现它们相互绘制,因为月份名称相同。这不是我所期望的行为,但回想起来是有道理的。
可能有一种奇特的方法可以解决此问题,但我只是将循环更改为此
month_names = []
for i in range(13):
last_month = datetime.now() - relativedelta(months=i)
# Create string of month name and year...
if i == 0:
text = format(last_month, ' %b')
else:
text = format(last_month, '%b')
month_names.append(text)
month_names.reverse()
哪个解决了这个问题!这对我来说非常令人沮丧,所以我希望这对某人有所帮助
推荐阅读
- python-3.x - 当我使用 peewee 查询附加到列表时,列名会不断出现数据
- reactjs - 在状态数组上使用映射函数
- python - 正则表达式未捕获多行字符串
- node.js - 如何使用复选框输入从 false 更改为 true?
- python - 'dataframe' 对象没有属性 'str' 问题
- python - 如何从 python 中的拆分块中删除无声块?
- spring-boot - 跨测功机向用户发送 websocket 消息
- c# - 将数据从 JSON 解析到 Windows 窗体
- performance - 将 Hive LLAP(Tez) 用于 ETL 而不是传统的 Hive(Tez) 或 Spark 有什么缺点?
- c++11 - 有人能告诉我为什么我收到“检测到堆损坏”错误吗?