Matplotlib绘图

Matplotlib绘图,第1张

Matplotlib绘图
  • Matplotlib简介
    • 复式折线图
    • 散点图
    • 条形图

Matplotlib简介

Matplotlib是一个易于使用的低级数据可视化库,是Python中重要的绘图库,有非常方便的绘图模块,可以绘制高质量的形式多样的图,它主要用运于二维绘图,可以让人们用更直观、形象的方式来观察数据。

复式折线图

导入库并重命名为plt为接下来的绘图做准备:

import matplotlib.pyplot as plt

由于软件的默认字体为英文,设置为中文需要查看该软件所支持的字体有哪些,代码如下:

from matplotlib.font_manager import FontManager
import subprocess
mpl_fonts = set(f.name for f in FontManager().ttflist)
print('all font list get from matplotlib.font_manager:')
for f in sorted(mpl_fonts):
    print('\t' + f)

运行显示出所支持的字体:

从图中可以看出软件自带有微软雅黑的字体,因此要为代码指定一种汉字的字体,否则不能输出汉字。
对于复式折线图需要通过两个数组来分别保存y轴的数据:

# 两条折线分别对应的Y轴参数
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] 
y_data2 = [52000, 54200, 51500, 58300, 56800, 59500, 62700]

为了更好的区别两条折线图,可以分别为折线图设计对应的颜色,标记样式及相关样式的大小:

# color:设置颜色;linewidth:指定折线的宽度;linestyle:设置线条类型;
# lable:设置图例参数;marker:标记的样式;ms:设置标记样式的大小
line1,=plt.plot(x_data, y_data, color='red', linewidth=2.0, linestyle='--',marker=r"o",ms=5)
line2,=plt.plot(x_data, y_data2, color='blue', linewidth=3.0,linestyle='-.',marker=r"+",ms=10)

通过添加相应的图例及对应x轴y轴的标签,使图例具有更好的可读性:
添加图例可通过增加一个参数lable再通过legned()函数显示:

plt.xlabel("X轴 年份")  # x轴的标签文字
plt.ylabel("Y轴 吨位") # Y轴的标签文字
plt.legend(handles=[line1, line2], labels=["出口","进口"],loc='upper left')

全部代码如下:

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017'] # X轴所显示的数据
# 两条折线分别对应的Y轴参数
y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000] 
y_data2 = [52000, 54200, 51500, 58300, 56800, 59500, 62700]

# color:设置颜色;linewidth:指定折线的宽度;linestyle:设置线条类型;
# lable:设置图例参数;marker:标记的样式;ms:设置标记样式的大小
line1,=plt.plot(x_data, y_data, color='red', linewidth=2.0, linestyle='--',marker=r"o",ms=5)
line2,=plt.plot(x_data, y_data2, color='blue', linewidth=3.0,linestyle='-.',marker=r"+",ms=10)
plt.xlabel("X轴 年份")  # x轴的标签文字
plt.ylabel("Y轴 吨位") # Y轴的标签文字
plt.legend(handles=[line1, line2], labels=["出口","进口"],loc='upper left') 
# 由于有两条折线,因此需要通过数组来存放对应折现的数据,并设置各自的图例参数
# 通过legend()函数显示图例的位置为左上角
plt.title("折线图")
plt.show()
 #显示所绘制的图形

运行结果图:

散点图

绘制散点图时,需要通过scatter()函数进行绘图:
scatter()函数中用运的参数
scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
【x、 y】散点的坐标
【s】散点的面积(利用这个可以属性绘制比较有个性的散点图)
【c】散点的颜色,默认为蓝色(值为’b’)
【marker】散点样式,默认为实心圆(值为’o’)
【cmap】可选,默认为None,它是一个Colormap实例
【norm】可选,默认为None,数据亮度(介于[0,1]之间的浮点数)
【vmin、vmax】亮度设置,如果norm已经设置,则该设置无效
【alpha】散点透明度(介于[0,1]之间的浮点数,0表示完全透明,1表示完全不透明)
【linewidth】散点的边缘线条宽度
【degecolors】散点的边缘颜色

import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

np.random.seed(19680801) # 随机种子
x = np.arange(0.0, 50.0, 2.0) # X轴的数值平均分布
y = x ** 1.3 + np.random.rand(*x.shape) * 30.0 # Y轴的数值随机分布
s = np.random.rand(*x.shape) * 800 + 500 # 通过X的数据来显示对应的散点图的形状大小

plt.title('散点图') 
plt.scatter(x, y, s, c="g", alpha=0.5, marker='*',label="Luck")  
    # 通过scatter()函数生成散点图;颜色为绿色;alpha:透明度,值在[0,1]范围内,1表示不透明,0表示透明;
    # marker用来标记样式,label为图例参数
plt.xlabel("Leprechauns x轴!!!")  # x轴的标签文字
plt.ylabel("Gold y轴!!!")  # y轴的标签文字
plt.legend(loc='upper left')  # 通过legend()函数显示图例的位置为左上角
plt.show()

结果图如下:

条形图

通过bar()函数来绘制条形图,bar()函数的形式及参数如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

x:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。
height:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。
width:每一个条形图的宽度,默认是0.8的宽度。
bottom:y轴的基线,默认是0,也就是距离底部为0.
align:对齐方式,{‘center’,‘edge’},默认是center,居中对齐;edge为靠边对齐,具体靠右边还是靠左边,看width的正负。
color:条形图的颜色。
edgecolor : 条形图边框的颜色。
linewidth : 条形图边框的宽度。如果为 0,则不绘制边框
uniform() 函数将随机生成下一个实数,它在 (x, y) 范围内,uniform()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
x – 随机数的最小值,包含该值。
y – 随机数的最大值,不包含该值。

from pylab import *
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

n = 12
X = np.arange(n) # X轴数据均匀分布
# X轴所对应的Y轴数据,uniform() 方法将随机生成下一个实数,它在 (x, y) 范围内,uniform()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
#x -- 随机数的最小值,包含该值。
#y -- 随机数的最大值,不包含该值。
Y1 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)
# 通过bar()函数绘制出对应的条形图;facecolor:条形图的填充色;edgecolor:设置轮廓颜色
bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
# 通过zip()函数将x,y参数打包成一个个元组,返回由这些元组组成的list(列表)
# ha设置整个条形图水平对齐方式;va设置条形图的垂直对齐方式
for x, y in zip(X, Y1):
    text(x, y+0.05, '%.2f' % y, ha='center', va='bottom')
for x, y in zip(X, -Y2):
    text(x, y-0.15, '%.2f' % y, ha='center', va='bottom')

ylim(-1.25, +1.25) # y轴坐标的上下边界
plt.title('条形图') # 所绘图形的标题
plt.xlabel(" x轴!!!")  # x轴的标签文字
plt.ylabel(" y轴!!!")  # y轴的标签文字
show()

结果图:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/868805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存