# matplotlib绘制一元二次方程曲线
import matplotlib.pyplot as plt
x = range(-100,100)
y = [i**2 for i in x]
plt.plot(x,y)
# matplotlib保存图片
plt.savefig('一元二次方程曲线图片保存.png')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,10,100)
sin_y = np.sin(x)
plt.plot(x,sin_y)
cos_y = np.cos(x)
plt.plot(x,cos_y)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1,10,100)
# 画布分区方法1:使用plt.subplot(完整版)
plt.subplot(2,2,1) # 指定2行2列,第一个位置
plt.plot(x,np.sin(x))
plt.subplot(2,2,3) # 指定2行2列,第三个位置
plt.plot(x,np.cos(x))
plt.show()
# 画布分区方法2:使用plt.subplot(简略版)
plt.subplot(221) # 指定2行2列,第一个位置
plt.plot(x,np.sin(x))
plt.subplot(223) # 指定2行2列,第三个位置
plt.plot(x,np.cos(x))
plt.show()
# 画布分区方法3:subplots画布分区
x = np.linspace(1,10,100)
fig, ax = plt.subplots(nrows=2, ncols=2)# fig可以用于保存图片,ax用于指定图片位置
ax[0,0].plot(x,np.sin(x))
ax[0][1].plot(x,np.cos(x))
散点图优势:判断两变量之间是否存在某种关联
import matplotlib.pyplot as plt
import numpy as np
# 绘制基本散点图
x = np.linspace(0,10,100)
# 方法1:使用scatter绘制散点图
# plt.scatter(x,np.sin(x))
# 方法2:使用plot绘制散点图
plt.plot(x,np.sin(x),'o')
plt.show()
# 使用scatter绘制不同大小不同颜色的散点图
# numpy中生成100个随机数
x = np.random.rand(100)
y = np.random.rand(100)
# 生成随机颜色
colors = np.random.rand(100)
# 生成随机大小
size = np.random.rand(100)*1000
plt.scatter(x,y,c=colors, s=size, alpha=0.7)
plt.show()
import matplotlib.pyplot as plt
import numpy as np
# 不同种类不同颜色的线
x=np.linspace(0,10,100)
plt.plot(x,x+0,'-g') #实线 绿色
plt.plot(x,x+1,'--c') #虚线 浅蓝色
plt.plot(x,x+2,'-.k') #点划线 黑色
plt.plot(x,x+3,'-r') #实线 红色
plt.plot(x,x+4,'o') #点 默认是蓝色
plt.plot(x,x+5,'x') #叉叉 默认是蓝色
plt.plot(x,x+6,'d') #砖石 红色
# 不同种类不同颜色的线并添加图例
x=np.linspace(0,10,100)
plt.plot(x,x+0,'-g',label='-g') #实线 绿色
plt.plot(x,x+1,'--c',label='--c') #虚线 浅蓝色
plt.plot(x,x+2,'-.k',label='-.k') #点划线黑色
plt.plot(x,x+3,'-r',label='-r') #实线 红色
plt.plot(x,x+4,'o',label='o') #点 默认是蓝色
plt.plot(x,x+5,'x',label='x') #叉叉 默认是蓝色
plt.plot(x,x+6,'dr',label='dr') #砖石 红色
#添加图例右下角lower right 左上角upper left 边框 透明度 阴影 边框宽度
plt.legend(loc='lower right',fancybox=True,framealpha=1,shadow=True,borderpad=1)
条形图优势:观察横向或者纵向的对比情况
bar:用于生成纵向条形图
barh:用于生成横向条形图
# 使用bar绘制柱状图,并设置柱的宽度
import matplotlib.pyplot as plt
import numpy as np
x=[2020,2025,2030,2035]
x_labels=[f'{i}年' for i in x]
y=[1000,3000,4000,5000]
plt.bar(x,y,width=3)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.xticks(x,x_labels)
plt.xlabel('年份')
plt.ylabel('销量')
plt.title('根据年份销量对比图')
plt.show()
# 对部分(正负值)条形图,使用颜色区分
x = range(5)
y = [1,-1,5,-10,7]
v_bar = plt.bar(x,y,color='red')
for bar, height in zip(v_bar, y):
if height<0:
# 单独设置条形图的其中一条
bar.set(color='green', linewidth='3')
import matplotlib.pyplot as plt
import numpy as np
x = range(3)
x_label = ['bar1', 'bar2', 'bar3']
y = [1,2,3]
# 波动(方差数据)
variance = [0.2, 0.4, 0.5] # 上下波动
# 绘制柱形图
plt.bar(x,y,width=0.5, yerr=variance)
# 设置y轴的高度方法
# 先获取波动值和y值的最大值
max_y = max(zip(y,variance))
plt.ylim([0,(max_y[0]+max_y[1])*1.2])
# 绘制两条直线中的阴影部分图fill_between
x = np.linspace(0,10,200)
y1 = 2*x +1
y2 = 3*x +1.5
fig,ax=plt.subplots()
ax.fill_between(x,y1,y2,color='red')
import matplotlib.pyplot as plt
import numpy as np
real_name = ['电影1','电影2','电影3']
real_num1 = [5453,7548,6421]
real_num2 = [1840,4013,3421]
real_num3 = [1080,1673,2342]
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置画布大小figure
plt.figure(figsize=(8,6),dpi=80)
# 调用bar绘制
x = range(len(real_name))
width = 0.3
plt.bar(x,real_num1, width=width, color='r',label=real_name[0])
# plt.bar(x,real_num2, width=width) 堆积图的画法
plt.bar([i+width for i in x], real_num2, width=width, color='b',label=real_name[1])
plt.bar([i+width*2 for i in x], real_num3, width=width, color='g',label=real_name[2])
# 设置xlabel ylabel
plt.xlabel('天')
plt.ylabel('票房数')
# 设置title
plt.title('3天3部电影票房并列条形图')
# 设置x_ticks
x_ticks = [f'第{i+1}天' for i in x]
plt.xticks([i+width for i in x],x_ticks)
plt.legend()
import matplotlib.pyplot as plt
import numpy as np
data = range(200, 225, 5)
bar_labels=['a','b','c','d','e']
#设置画布
plt.figure(figsize=(8,6))
x = range(len(bar_labels))
bars = plt.barh(x,data,height=0.6)
#设置yticks
plt.yticks(x,bar_labels,fontsize=24)
# 在指定位置(柱形图的柱前)显示(文本内容)值
for bar,d in zip(bars,data):
x = bar.get_width()+bar.get_width()*0.05
y = bar.get_y()+bar.get_height()/2
text_data = d
plt.text(x,y,text_data,fontsize=24)
饼图优势:呈现比例
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']# 设置中文
# 准备数据
man = 71234
woman = 67921
# 计算男女所占比
man_perc = man / (man+woman)
woman_perc = woman / (man+woman)
labels = ['男','女']
colors = ['blue','red']
# 调用pie绘制饼图 传入一个列表,列表中是比例数据
paches, texts, autotexts = plt.pie([man_perc,woman_perc],
autopct='%0.1f%%', # 计算比例保留几位小数
labels=labels,# 标签
colors=colors,# 设置颜色
explode = (0,0.1))# 不同类别中间缝隙大小,默认为无缝隙)
# 饼图设置字体大小和颜色
for text in autotexts:
text.set_color('white')
text.set_fontsize(24)
# 饼图设置标签值得字体颜色
for t in texts:
t.set_color('green')
t.set_fontsize(24)
由于一些列高度不等的纵向条纹或线段标识数据分布情况。横轴表示数据范围,纵轴标识分布情况
特点:绘制连续性得数据,展示一组或多组数据的分布情况并统计
概念:
组距:魅族数据的分割区间
组数:(最大数据-最小数据)/组距
import matplotlib.pyplot as plt
import numpy as np
data = [45, 49, 42, 42, 36, 37, 31, 38, 35,
39, 43, 33, 34, 36, 35, 36, 34, 32, 36, 32,
37, 33, 32, 38, 35]
# 设置组距
bin_width = 2
# 计算祖数
bin_count = int(max(data)-min(data)/bin_width)
x_ticks = range(min(data), max(data)+1, bin_width)
plt.xticks(x_ticks)
plt.hist(data,bin_count)
盒须图也是观察数据分布状态,并且能够查看1/4,3/4,离群点
import matplotlib.pyplot as plt
import numpy as np
data = [np.random.normal(0,i,100) for i in range(4)]
# vert:是竖着还是横着
# notch:中位数切口,更好找到中位数
plt.boxplot(data, vert=True, notch=True)
plt.title('boxplot')
plt.xticks([i+1 for i in range(len(data))],['box1','box2','box3','box4'])
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10,10,100)
y = np.linspace(-10,10,100)
# 计算x y 相交点
X, Y = np.meshgrid(x,y)
# 计算Z
Z = np.sqrt(X**2+Y**2)
# 绘制三维图
plt.contour(X,Y,Z)
plt.contourf(X,Y,Z)
# 三位画布绘制三维图
from mpl_toolkits.mplot3d import Axes3D
figure = plt.figure()
ax3d = Axes3D(figure)
ax3d.plot_surface(X,Y,Z)