Python数据可视化
一:Matplotlib
import matplotlib.pyplot as plt
import numpy as np
# plt,np取别名
matplotlib常用命令:
plt.figure(facecolor='颜色', figsize=(a,b))
定义画布颜色和尺寸
- 图表标题和图例
plt.title()
plt.xlabel()
plt.ylabel()
fontsize()
# 字体大小
plt.legend()
- x,y轴刻度
plt.xticks()
plt.yticks()
plt.tick_params(bottom,left,right,top)
# 坐标轴刻度显示
plt.rcParams["ytick.direction"]="in"
坐标轴短线在里面显示
- 图表中的网格线,颜色,线的类型
plt.grid(c="grey",linestyle"--")
线型 | 说明 |
---|---|
— | 实线 |
—— | 虚线 |
—. | 点画线 |
: | 点线 |
legend()图例位置调整
matplotlib.pyplot.legend(loc='String' or Number, bbox_to_anchor=(num1, num2))
Marker
标记 | 说明 |
---|---|
‘o’ | 圆 |
‘+’ | 加号 |
‘*’ | 星号 |
‘x’ | 叉号 |
‘s’ | 方形 |
‘d’ | 菱形 |
‘^’ | 上三角 |
‘v’ | 下三角 |
‘>’ | 右三角 |
‘<’ | 左三角 |
‘p’ | 五角形 |
‘h’ | 六角形 |
颜色缩写:
线型 | 说明 |
---|---|
y | 黄色 |
m | 品红色 |
c | 青蓝色 |
r | 红色 |
g | 绿色 |
b | 蓝色 |
w | 白色 |
k | 黑色 |
二:绘制折线图
实例一:读取excel文件绘制简单折线图
import matplotlib.pyplot as plt
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
plt.figure(facecolor="grey", figsize=(8, 4)) # 设置画布的大小和颜色
plt.grid(axis="y", c="grey", linestyle="-") # 设置网格线的样式,不显示y轴
plt.title("成绩折线图", fontsize=14)
plt.xlabel("姓名", fontsize=14)
plt.ylabel("成绩", fontsize=14)
# 读取excel数据
df = pd.read_excel(r'D:\Pycharm\data\student_score.xlsx', sheet_name=0)
x = df["姓名"]
y1 = df["数学"]
y2 = df["语文"]
y3 = df["英语"]
plt.plot(x, y1, marker="o", c="b", linestyle="--", linewidth=1)
plt.plot(x, y2, marker="s", c="r", linestyle="-.", linewidth=1)
plt.plot(x, y3, marker="p", c="g", linestyle="-", linewidth=1)
plt.legend(["数学", "语文", "英语"], loc="lower right")
plt.yticks(range(50, 150, 10)) # 设置y轴的刻度
plt.show()
输出结果:
实例二:绘制正余弦函数
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题
plt.rcParams['axes.unicode_minus']=False # 解决负号不显示问题
x1 = np.arange(0, 4*np.pi, 0.1)
y = np.sin(x1)
x2 = np.arange(0, 3.5*np.pi, 0.1)
z = np.cos(x2)
plt.plot(y, linewidth=1, c="b")
plt.plot(z, linewidth=1, c="r")
plt.legend(["sin x", "cos x"])
plt.title("正、余弦函数图像", fontsize=14)
plt.show()
三:绘制柱形图
示例一:多柱状图
plt.bar(x, height,width,align="center",kwargs)
x:传递数值序列,指定条形图中x轴的刻度值
height:柱子的高度,y轴数据
width:条形图的宽度,默认为0.8
bottom:用于绘制堆叠条形图
align:对齐方式
kwargs:关键字参数,其他可选参数:color、alpha、label
plt.text(x,y,string,va,ha)
x,y:文本标签的坐标
string:标注的值
va,ha:垂直和水平的对其方式
# 绘制基本柱状图
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 将坐标轴刻度线向内显示
plt.rcParams['xtick.direction'] = "in"
plt.rcParams['ytick.direction'] = "in"
plt.figure(facecolor="grey",figsize=(8, 6))
plt.grid(axis="y",linestyle="--",c="grey")
plt.title("2021年销售员业绩",fontsize=14)
plt.xlabel("月份",fontsize=14)
plt.ylabel("销量",fontsize=14)
df=pd.read_excel(r'C:\Users\Desktop\销量.xlsx', sheet_name=0)
# 建立两个空列表x0,month
x0=[]
month=[]
for i in range(1,13):
month.append(str(i)+"月")
x0.append(i)
plt.xticks(range(1,13),month) # 定义x轴刻度范围
x=np.array(x0) # 将列表x0转换为可以进行运算的
y1=df["数学"]
y2=df["语文"]
y3=df["英语"]
plt.bar(x-0.2,y1,width=0.2)
plt.bar(x,y2,width=0.2)
plt.bar(x+0.2,y3,width=0.2,alpha=0.5) # 为条形图的透明度
plt.legend(["数学","英语","语文"])
plt.show()
输出结果:
实例二:个性化柱状图
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.family'] = "Times New Roman"
fig, ax = plt.subplots(figsize=(10, 5))
# x轴不显示 plt.gca().axes.get_xaxis().set_visible(False)
# x轴刻度不显示
ax.tick_params(axis='x', direction='in', bottom=False)
# 读取Excel文件
df = pd.read_excel(r"D:\Pycharm\data\type.xlsx", sheet_name=0)
x0 = df["type"]
x = np.arange(len(x0))
y1 = df[1977]
y2 = df[2001]
y3 = df[2016]
plt.bar(x-0.2, y1, color="#130074", edgecolor="k", width=0.2)
plt.bar(x, y2, color="#CB181B", edgecolor="k", width=0.2)
plt.bar(x+0.2, y3, color="w", edgecolor="k", width=0.2)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.set_xticks(x)
ax.set_xticklabels(x0, size=10)
plt.ylabel("areas(ha)", fontsize=14)
plt.ylim(0, 250000)
plt.legend(["1977", "2001", "2016"])
plt.title("land use trend")
plt.show()
输出结果:
四:绘制饼形图
plt.pie(x,labels,colors,pctdistance,labeldistance,autopct,startangle,radius,center,textprops)
x:每一块饼形图比例
labels:每一块饼形图外侧显示的说明文字
colors:各块饼图的颜色
labeldistance:标记的位置
autopct:设置饼图百分比,可以使用格式化字符串或format函数
startangle:起始绘制角度,默认是x轴正方向逆时针开始绘制
radius:饼形图的半径,默认值为1
center:浮点类型列表,可选参数,默认值为(0,0)表示图表中心位置
pctdistance:饼内标签所在位置,所在饼图半径的比例
textprops:设置标签和比例文字的格式,字典类型
wedgeprops:设置饼图的宽度,边框,字典类型
实例一:基本饼形图
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(10, 6))
# 读取Excel文件
df = pd.read_excel(r"D:\Pycharm\data\JD_手机销售数据.xlsx", sheet_name=0)
x = df["北京出库销量"]
labels = df["商品名称"]
plt.pie(x, autopct="%0.1f%%")
# 设置x,y轴刻度一致,保证饼形图为圆形
plt.axis("equal")
plt.title("2021年京东各手机品牌出库销售分析", fontsize=14)
plt.legend(df["商品名称"])
plt.show()
输出结果:
实例二:嵌套饼形图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
elements = ["面粉", "砂糖", "奶油", "草莓酱", "坚果"]
weight1 = [40, 15, 20, 10, 15]
weight2 = [30, 25, 15, 20, 10]
plt.pie(weight1, autopct="%0.1f%%", radius=0.7, pctdistance=0.8,
textprops=dict(color="w", fontsize=12), wedgeprops=dict(width=0.3, edgecolor="w"))
plt.pie(weight2, autopct="%0.1f%%", pctdistance=0.85,
textprops=dict(color="w", fontsize=12), wedgeprops=dict(width=0.3, edgecolor="w"))
plt.axis("equal")
plt.legend(elements)
plt.show()
输出结果: