matplot的画图,虽然好像很简单,但是又很搞人
bar官方文档
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
bar_data = pd.read_csv('data.csv', header=None)
plt.rcParams['font.family'] = "Times New Roman"
fig, ax = plt.subplots(figsize=(5, 3), dpi=200)
# 这里的数据是1行24列
x= np.linspace(0, 23, 24)
bar1= bar_data.iloc[0, 0:].values
bar2= bar_data.iloc[1, 0:].values
bar3= bar_data.iloc[2, 0:].values
width = .4
ax.bar(x, bar1, width, align='center', label='bar1',color='white',hatch="//",ec='k',lw=.6)
ax.bar(x, bar2, width, bottom=bar1, label='bar2',color='gray',ec='k',lw=.6)
ax.bar(x, bar3, width, bottom=bar1+ bar2, label='bar3',color='white',hatch="...",ec='k',lw=.6)
ax.set_ylim(0, 3)
ax.tick_params(direction='out', labelsize=12, length=5.5, width=1, top=False, right=False)
ax.legend(fontsize=11, frameon=False, loc='upper center', ncol=4)
ax.set_ylabel('Electricity Cost', fontsize=13)
ax.set_xlabel('Time Slot', fontsize=13)
text_font = {'size': '17', 'weight': 'bold', 'color': 'black'}
ax.text(.03, .93, "(a)", transform=ax.transAxes, fontdict=text_font, zorder=4)
ax.text(.87, -.08, '\nVisualization by DataCharm', transform=ax.transAxes,
ha='center', va='center', fontsize=5, color='black', fontweight='bold', family='Roboto Mono')
plt.show()
1.窗口大小 figsize=(宽, 高), dpi=分辨率
尺寸单位:英寸(1 英寸=2.54 厘米),分辨率:每1英寸上的像素点数
plt.subplots(figsize=(5, 3), dpi=200)
2.绘制单个柱状图
ax.bar(x, bar1, width, align='center', label='bar1',color='white',hatch="//",ec='k',lw=.6)
x轴数据,
y轴数据,
宽度:取值在0~1之间,默认为0.8
排列:‘center’或者’edge’,居中或者左对齐
标签名
颜色
填充图案: {’/’, ‘’, ‘|’, ‘-’, ‘+’, ‘x’, ‘o’, ‘O’, ‘.’, ‘*’}
ec:设置填充图案的颜色
lw:设置填充图案的宽度
3.堆叠柱状图
ax.bar(x, bar2, width, bottom=bar1, label='bar2',color='gray',ec='k',lw=.6)
ax.bar(x, bar3, width, bottom=bar1+ bar2, label='bar3',color='white',hatch="...",ec='k',lw=.6)
bottom底部:关键是第三组要堆叠在第一组和第二组的和之上
4.效果