柱状图和条形图
import pandas as pd
import matplotlib.pyplot as plt
#柱状图
#https://www.cnblogs.com/muchi/articles/11946852.html
#上面解决找不到SimHei字体的解决办法--参考博客
plt.rcParams['font.sans-serif']=['SimHei']
data=pd.read_excel(r"C:newapp01python_filepandas_filetest01.xlsx")
data.sort_values(by="分数",inplace=True,ascending=False)
# plt.bar(data.姓名,data.分数,label="成绩") #画柱形图
# plt.xlabel("姓名") #横坐标标签
# plt.ylabel("分数") #纵坐标标签
# plt.xticks(data.姓名,rotation=45) #倾斜角度
# plt.ylim([-30,150]) #设置纵坐标范围
# plt.tight_layout() #紧凑型布局
# plt.legend(loc="upper right") #显示label值
# plt.title("三年级成绩",fontsize=16,fontweight='bold') #设置标题
# plt.savefig(r'C:tasktest01.jpg')
# plt.show() #显示柱状图
#条形图
#horizontal是条形图,alpha是透明度
plt.bar(x=0,bottom=data.姓名,height=0.5,width=data.分数,color='red',orientation='horizontal',alpha=0.5)
plt.show()
添加数据标签的柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
data=pd.read_excel(r"C:newapp01python_filepandas_filetest02.xlsx")
data.sort_values(by="第二年",inplace=True,ascending=False)
# print(data['姓名'].values.tolist())
width=0.3
plt.bar(x=data.姓名,height=data.第一年,color="red",width=width,label="第一年")
plt.bar(x=np.arange(len(data.姓名))+width,height=data.第二年,color="blue",width=width,label="第二年")
plt.legend() #显示label
plt.xticks(data.姓名)
x=plt.gca()
x.set_xticklabels(data.姓名,rotation=45,ha='center') #va是垂直对齐方式,ha是水平对齐方式
#设置整体图形的间距
shape=plt.gcf()
shape.subplots_adjust(left=0.1,bottom=0.3)
for x, y1 in enumerate(data.第一年): #设置数据标签,enumerate返回的是第一个位置坐标,第二个是数据值
plt.text(x,y1/2,str(y1),fontsize=20,rotation=0,ha='center',va='bottom') #y1/2表示把y1数据放在柱状图中间
for x, y2 in enumerate(data.第二年):
plt.text(x+width,y2,str(y2),fontsize=20,rotation=0,ha='center',va='bottom')
plt.show()
饼图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
data=pd.read_excel(r"C:newapp01python_filepandas_filetest02.xlsx")
plt.pie(x=data.第一年,labels=tuple(data.姓名),
explode=(0.2,0,0,0), #explode:可以让分块延展出来或者收缩进去 ;
colors=['blue','red','g','yellow'],
autopct='%.1f%%', # autopct: 设置百分比
startangle=90, #旋转90度
counterclock=False, #设置为顺时针
labeldistance=0.7, #标签到分块的距离,默认为1.1
radius=1.5, #半径
pctdistance=0.3, #默认0.6,百分比的数据的位置
textprops={'fontsize':15,'color':'w'}, #标签的字体颜色设置
shadow=True, #显示阴影,达到3D效果
)
plt.pie(x=data.第二年,radius=0.6)
plt.axis('equal') #将饼图变为正圆
plt.legend(loc='upper right',
fontsize=10,
bbox_to_anchor=(1.1,1.05),
borderaxespad=0.3,
ncol=4, #分为4列
) #添加图例及其位置
plt.savefig(r'C:newapp01python_filepandas_filebingtu3.jpg',
dpi=200, #dpi表示分辨率
bbox_inches='tight' #忽略不可见的轴
) #保存
plt.show()
折线图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
data=pd.read_excel(r"C:newapp01python_filepandas_filetest02.xlsx")
plt.plot(data.第一年,data.第二年,
color='g',
marker='*', #用*标出关键节点
ms=10, #marker的标记大小
)
for x, y in zip(data.第一年,data.第二年): #设置数据标签,zip返回的x,y是分别传入两个列表的位置一一对应
plt.text(x,y,str(y),fontsize=20,rotation=0,ha='center',va='bottom')
plt.show()
平均线
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
data=pd.read_excel(r"C:newapp01python_filepandas_filetest02.xlsx")
plt.bar(data.第一年,data.第二年,
color='g',
label='第二年',
alpha=0.6, #透明度
)
plt.legend()
average=np.mean(data.第二年) #平均线
plt.axhline(y=average,color='b',linestyle=':') # :表示虚线
plt.show()
玫瑰图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
data=pd.read_excel(r"C:newapp01python_filepandas_filerose.xlsx")
colors=['b','gold','darkviolet','turquoise','r','g','grey','c',
'm','y','k','darkorange','lightgreen','plum','cyan','fuchsia',
'crimson','dodgerblue','skyblue','deeppink']
angle=np.linspace(0,2*np.pi,len(data.业绩),endpoint=False) #角度
picture=plt.axes(polar=True) #雷达图模板,含有轴线
#picture.set_theta_direction(-1) #180度旋转
picture.set_theta_zero_location('N') #让图片端正
grade=np.concatenate((data.业绩,[data.业绩[0]])) #两个列表连接
angle=np.concatenate((angle,[angle[0]]))
name=np.concatenate((data.姓名,[data.姓名[0]]))
plt.bar(angle,grade,width=0.33,color=colors)
plt.bar(angle,height=150,width=0.33,color='white')
for angle,grade,name in zip(angle,grade,name):
plt.text(angle+0.03,grade+100,str(name))
plt.gca().set_axis_off() #关闭轴线
plt.savefig(r'C:newapp01python_filepandas_filerose.jpg',
dpi=300, #dpi表示分辨率
bbox_inches='tight' #忽略不可见的轴
)
plt.show()
以上。



