python-Matplotlib库

垂直柱状图 bar()

python-Matplotlib库

data = pd.read_excel(pth)
data.sort_values(by="分数",inplace=True,ascending=False)
# 图标中如需要显示中文,则定义中文类型,否则显示乱码
plt.rcParams["font.sans-serif"]=["Simhei"]
# 图中如果某个轴的数据要显示负数,设置如下.
plt.rcParams[‘axes.unicode_minus‘] = False
plt.bar(x=data["姓名"],height=data["分数"],color="skyblue",label="分数成绩") #label是设定图例,需要用legend方法显示出来
plt.legend() #loc参数如下
‘‘‘‘
best‘	0
‘upper right‘	1
‘upper left‘	2
‘lower left‘	3
‘lower right‘	4
‘right‘	5
‘center left‘	6
‘center right‘	7
‘lower center‘	8
‘upper center‘	9
‘center‘	10
‘‘‘
plt.xlabel("考生姓名")
plt.ylabel("考生成绩")
plt.xticks([i for i in range(0,9,2)],rotation = 45)
plt.ylim(-20,max(data["分数"])+20)
plt.title(label="一年级考试成绩",fontdict={"fontsize":16,"fontweight":"bold"})
#字体参数可以用上面字典模式,也可以用下面的单个参数赋值模式
plt.title(label="一年级考试成绩",fontsize=16,fontweight="bold")
plt.show()

python-Matplotlib库

分组柱形图,

python-Matplotlib库
原理其实很简单,先生成6部影片的第一天数据,然后在往右偏移一点距离生成第二天的数据,3~5天重复,
第一天的偏移距离为0,第二天的偏移距离为0+偏移距离,第二天的偏移距离为0+偏移距离*2,3~5天重复
在下面代码中,我们对每天生成的柱形图设置自身宽度为0.2,每一天的票房数据间隔为0.1

plt.rcParams["font.sans-serif"]=["Simhei"]
# 图中如果某个轴的数据要显示负数,设置如下.
plt.rcParams[‘axes.unicode_minus‘] = False
# 如果对柱形宽度和偏移概念不深,可以尝试修改偏移为0.2试试
width = 0.2
space = 0.1
plt.bar(data["影片名"],data["第一天票房"],width=width,label="day1")
plt.bar([i+(space*1) for i in range(len(data["影片名"]))],data["第二天票房"],width=width,label="day2")
plt.bar([i+(space*2) for i in range(len(data["影片名"]))],data["第三天票房"],width=width,label="day3")
plt.bar([i+(space*3) for i in range(len(data["影片名"]))],data["第四天票房"],width=width,label="day4")
plt.bar([i+(space*4) for i in range(len(data["影片名"]))],data["第五天票房"],width=width,label="day5")
plt.legend()
# xticks第一个参数代表了每个
plt.xticks([i+(space*2) for i in range(len(data["影片名"]))],data["影片名"].values.tolist())
plt.show()

python-Matplotlib库
优化版: 上面如果需要5天的票房比较,重复了5次.试着用循环遍历plt.bar()

plt.rcParams["font.sans-serif"]=["Simhei"]
# 图中如果某个轴的数据要显示负数,设置如下.
plt.rcParams[‘axes.unicode_minus‘] = False
# 如果对柱形宽度和偏移概念不深,可以尝试修改偏移为0.2试试
width = 0.2
space = 0.1
rows_num = data.iloc[0,:].shape[0]
for j in range(1,rows_num):
    plt.bar([i+(space*j) for i in range(len(data["影片名"]))],data.iloc[:,j], width=width,label="day%i"%(j))
plt.legend()
# xticks第一个参数代表了每个
plt.xticks([i+(space*(rows_num/2)) for i in range(len(data["影片名"]))],data["影片名"].values.tolist())
plt.show()

横向柱状图(条形图) barh

plt.rcParams["font.sans-serif"]=["Simhei"]
# 图中如果某个轴的数据要显示负数,设置如下.
plt.rcParams[‘axes.unicode_minus‘] = False
plt.barh(y=data["姓名"],width=data["分数"],height=0.5,label = "成绩分数")
plt.legend(loc="best")
plt.ylabel(ylabel="学生名",rotation = 15)
plt.xlabel(xlabel="成绩")
plt.title(label="一年级考试成绩",fontsize=16,fontweight="bold")
plt.show()

python-Matplotlib库

python-Matplotlib库

上一篇:进程通信(1)


下一篇:代码复用应该这样做(3)