这部分主要时讲画饼状图和柱状图
一、柱状图

import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #防止出现中文乱码,加上这句

GDP =value_max20 #柱子的数值
plt.figure(figsize=(20,20)) 
# 绘图
plt.bar(range(20), GDP, align = 'center',color='steelblue', alpha = 0.8) #画20个柱子,数据来自GDP,中心对齐,颜色蓝色,透明度0.8
# 添加轴标签
plt.ylabel('销售数量',fontsize=20) #y轴的标签名
# 添加标题
plt.title('2018-2020年车厂销售情况') #标题
# 添加刻度标签
plt.xticks(range(20),dic_max20,rotation=270,fontsize=20) #x轴刻度标签,20个刻度,数据来自dic_max20,旋转270°,字体大小20
# 设置Y轴的刻度范围
#plt.ylim([5000,15000])
# 为每个条形图添加数值标签    enumerate可以同时获得索引和值
for x,y in enumerate(GDP):
    plt.text(x,y+100,'%s' %round(y,1),ha='center')#在柱子上标文字,按照GDP列表的大小进行循环,第一个x代表获取的是GDP的横坐标,y代表的是获取GDP的竖坐标,y+100代表在竖坐标基础上加100,
    #显示的文字就是%round(y,1),中心对齐

plt.show()# 显示图形

效果

python柱状图横坐标设置 python柱状图如何设置标签_python

这是画单个柱状图的情况,如果要画分组的柱状图,例如想画三个组,每个组都有3个或者5个柱子,每组之间分开,又是不一样的画法。

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

import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] # 防止中文乱码

color=['grey','gold','darkviolet','turquoise','r','g','b','c','m','y'] #颜色代码

labels = ['2018年', '2019年', '2020年'] # x轴坐标名称

count_2018 = [5.48, 3.78, 3.25] #原始数据
count_2019 = [6.04, 5.69, 5.47]
count_2020=[10.70, 8.88, 6.61]

count1=[5.48,6.04,10.70] #要将矩阵逆置,相当于先只画出每组的第一个,再画第二个
count2=[3.78,5.69,8.88]
count3=[3.25,5.47,6.61]


count_sum=[5.48, 3.78, 3.25,
           6.04, 5.69, 5.47,
           10.70, 8.88, 6.61]

dic_sum=['河南', '内蒙古', '河北',
        '河南', '黑龙江', '吉林', 
         '黑龙江', '吉林', '河南']
#为了给每个柱子写上文字

dict_2020=['黑龙江', '吉林', '河南']

dict_2019=['河南', '黑龙江', '吉林']

dict_2018=['河南', '内蒙古', '河北']



x = np.arange(len(count1)) #x坐标长度

plt.figure(figsize=(9,6)) 

width=0.2 #左右宽度
"""
rects1 = plt.bar(x - width, count1, width,color=['grey','gold','y']) # 返回绘图区域对象
rects2 = plt.bar(x, count2, width,color=['green','r','pink'])
rects3 = plt.bar(x + width, count3, width,color=['b','c','m'])
"""
rects1 = plt.bar(x-width, count1, width) # 返回绘图区域对象,画每组数据的第一个柱子,在x整体上向左移width,数据是count1,宽度是width
rects2 = plt.bar(x, count2, width) #画每组数据的第二个柱子,处于x正中,数据是count2,宽度是width
rects3 = plt.bar(x+width, count3, width) #画每组数据的第三个柱子,在x整体上向右移width,数据是count3,宽度是width
#rects4 = plt.bar(x+width, count4, width)
#rects5 = plt.bar(x+width*2, count5, width)


"""
rects1 = plt.bar(x - width, count1, width) # 返回绘图区域对象
rects2 = plt.bar(x, count2, width)
rects3 = plt.bar(x + width, count3, width)
"""





# 设置标签标题,图例
plt.ylabel('单位:万辆')
plt.title('2018-2020地区销售情况')
plt.xticks(x,labels)


word=""
def set_label(rects):
    global word
    for rect in rects:
        height = rect.get_height() # 获取⾼度
        height=np.float(height)
        word=""
        for i in range(len(count_sum)):
            if height == count_sum[i]: #给每个柱子命名上不同的省份
                if height==6.45:
                    height+=1 
                word=word+dic_sum[i]+'\n'+str(height)
                break
        print(word)
        plt.text(x = rect.get_x() + rect.get_width()/2, # ⽔平坐标
                 y = height+0.4, # 竖直坐标
                 s = word, # ⽂本
                 ha = 'center',
                 fontsize=10, #字体样式
                 fontweight='bold',
                 verticalalignment="center") # ⽔平居中
"""
for i in range(3):
    if()
    set_label(rects1,"黑龙江")
    set_label(rects2,"吉林")
    set_label(rects3,"吉林")
"""
set_label(rects1)
set_label(rects2)
set_label(rects3) #画出第1 2 3 组数据
#set_label(rects4)
#set_label(rects5)

plt.tight_layout() # 设置紧凑布局
plt.savefig('./分组带标签柱状图.png')

效果:

python柱状图横坐标设置 python柱状图如何设置标签_数据_02


同样的,画每组5个也是同样的操作,试着调一调

二、饼状图:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

#explode = (0.2,0,0,0,0.2,0,0)
label = dic_max20 #标签名
data_list = value_max20 #数值

fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot()  #添加一个就画了一个图,可以添加221 223等多个,同时画多个图
ax.pie(data_list, labels=label, autopct='%1.2f%%') #pie画饼状图,数值就是data_list,标签就是label,计算出的数值保留两位小数
plt.title("2018-2020年车厂销售情况")
plt.show()

没截全,凑活着看吧

python柱状图横坐标设置 python柱状图如何设置标签_python柱状图横坐标设置_03