用面对对象的方式绘制直方图,饼图,散点气泡图,误差棒图

1.使用pyplot 的 hist() 函数可以快速绘制直方图,hist() 函数语法格式如下

hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, label=None, stacked=False, normed=None, *,data=None, **kwargs)

该函数常用参数如下

x: 作直方图的X轴数据,必须是一维数组。多维数组可以先进行扁平化再作图

bins: 直方图的柱数,可选项,默认为10

range:表示数据的范围,若没有提供则默认为(x.min(),x.max())

normed: 是否将得到的直方图向量归一化。默认为0

facecolor: 直方图颜色

alpha: 透明度

histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’

edgecolor: 直方图边框颜色

例 需求一: 另外再生成一个包含20000个数据的标准正态分布数组,并在同一个绘图区域并排展示

import matplotlib.pyplot as plt
import numpy as np
# 1.生成10000个随机数
random_state1 = np.random.RandomState(19680801)
random_x1 = random_state1.randn(10000)

# 2.生成20000个随机数
####################################
####################################

# 3.绘制包含25个矩形条的两组直方图(并排展示)
####################################
####################################
# 4.展示图表
plt.show()
示例代码如下
import matplotlib.pyplot as plt
import numpy as np

#导入模块

random_state1 = np.random.RandomState(19680801)
random_x1 = random_state1.randn(10000)
random_state1 = np.random.RandomState(19680801)
random_x2 = random_state1.randn(20000)

#插入数据

plt.hist([random_x1,random_x2],bins=25,facecolor='r')

#作图
plt.show()

运行结果如图所示

2.使用pyplot 的 pie() 函数可以快速绘制饼图或环形图,pie() 函数语法格式如下

pie(x, explode=None, labels=None, autopct=None, pctdistance=0.6, shaow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textpropos=None, center=(0, 0), frame=False, *, data=None)

pie()函数的参数如下:

x:各个饼块的尺寸。类1维数组结构。
explode:每个饼块相对于饼圆半径的偏移距离,取值为小数。类1维数组结构。默认值为None。
labels:每个饼块的标签。字符串列表。默认值为None。
colors:每个冰块的颜色。类数组结构。**颜色会循环使用。**默认值为None,使用当前色彩循环。
autopct:饼块内标签。None或字符串或可调用对象。默认值为None。如果值为格式字符串,标签将被格式化,如果值为函数,将被直接调用。
pctdistance:饼块内标签与圆心的距离。浮点数。默认值为0.6,autopct不为None该参数生效。
shadow:饼图下是否有阴影。布尔值。默认值为False。
labeldistance:饼块外标签与圆心的距离。浮点值或None。默认值为1.1。如果设置为None,标签不会显示,但是图例可以使用标签。
startangle:饼块起始角度。浮点数。默认值为0,即从x轴开始。角度逆时针旋转。
radius:饼图半径。浮点数。默认值为1.
counterclock:角度是否逆时针旋转。布尔值。默认值为True。
wedgeprops:饼块属性。字典。默认值为None。具体见matplotlib.patches.Wedge 。
textprops:文本属性。字典。默认值为None。
center:饼图中心坐标。(float,float)浮点数二元组。默认值为(0,0)。
frame:是否绘制子图边框。布尔值。默认为False。
rotatelabels:饼块外标签是否按饼块角度旋转。布尔值。默认为False。
normalize:是否归一化。布尔值或None。默认值为None。
True:完全饼图,对x进行归一化,sum(x)==1。
False:如果sum(x)<=1,绘制不完全饼图。如果sum(x)>1,抛出ValueError异常。
None:如果sum(x)>=1,默认值为True。如果sum(x)<1,默认值为False。
绘制不完全饼图,需要明确传递normalize=False。
pie()的返回值为三元组。

patches :matplotlib.patches.Wedge对象序列。类型为列表。
texts:外标签Text对象列表。类型为列表。
autotexts:只有autopct属性不为None才会返回值,饼块内标签Text对象列表。类型为列表
 

代码示例如下

import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei'

x = [1, 5, 4, 3]
labels = ['a', 'b', 'c', 'd']
explode = [-0.1, 0, 0.1, 0]
colors =['r','b']

# 子图1,显示默认属性情况,为与子图2对比,添加了外标签
plt.subplot(241)
plt.pie(x, labels=labels)
plt.title('默认属性')
# 子图2,演示外标签相关属性
plt.subplot(242)
plt.pie(x, labels=labels,labeldistance=1.2,rotatelabels=True)
plt.title('外标签相关属性')
# 子图3,演示内标签相关属性,起始角度设置为30
plt.subplot(243)
plt.pie(x, autopct='%1.1f%%',pctdistance=0.4,startangle=30)
plt.title('内标签相关属性')
# 子图4,演示饼块分离、颜色循环、阴影
plt.subplot(244)
plt.pie(x, explode=explode, colors=colors,shadow=True)
plt.title('饼块分离、颜色循环')
# 子图5,演示修改饼图半径、角度顺时针旋转
plt.subplot(245)
plt.pie(x, radius=1.2,counterclock=False)
plt.title('修改半径、顺时针')
# 子图6,演示normalize为默认值None
plt.subplot(246)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x) 
# normalize为默认值None,这时sum(x)<1,相当于normalize=Fasle
# 运行时会有警告,因为未来版本默认normalize=True
# 建议绘制不完全饼图使用plt.pie(x,normalize=Fasle)
plt.title('normalize=None')
# 子图7,演示normalize为True,这时虽然sum(x)<1,但是会强制归一化,绘制完全饼图
plt.subplot(247)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x,normalize=True) 
plt.title('normalize=True')
# 子图8,演示normalize为False,这时sum(x)<1,绘制不完全饼图
plt.subplot(248)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x,normalize=False) 
plt.title('normalize=False')
plt.show()

运行结果如下图所示

2.1环形图与饼图类似

饼图示例代码如下

import numpy as np
import matplotlib.pyplot as plt
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制饼图 :半径为0.5, 数值保留1位小数
plt.pie(data, radius=1.5, labels=pie_labels, autopct='%3.1f%%')
plt.show()

环形图示例代码如下

#导入模块
import numpy as np
import matplotlib.

plt.pie(data, radius=1.5, labels=pie_labels, wedgeprops={'width': 0.7},
        autopct='%3.1f%%', pctdistance=0.75)
#圆环图 :外圆半径为1.5, 楔形宽度为0.7

pyplot as plt
#插入数据

data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])

# 绘制
plt.show()

实操代码示例

import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 外侧说明文字
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']

# 数据
money_scale = [1000, 100, 800, 200, 300, 200, 20, 200]
# 爆炸程度
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
plt.pie(money_scale, labels=kinds, wedgeprops={'width':0.7},autopct='%3.1f%%',pctdistance=0.75,shadow=True,explode=dev_position,startangle=90,radius=1.5)
plt.show()

运行结果如图所示

3.使用pyplot 的 scatter() 函数可以快速绘制散点图或气泡图,scatter() 函数语法格式如下

matplotlib.pyplot.scatter(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:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

marker:点的样式,默认小圆圈 'o'。

cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

alpha::透明度设置,0-1 之间,默认 None,即不透明。(越小越透明)

linewidths::标记点的长度。

edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

**kwargs::其他参数。

散点图示例代码如下

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'hotpink')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')

plt.show()

气泡图示例代码如下

import numpy as np
import matplotlib.pyplot as plt

# 随机数生成器的种子
np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置颜色及透明度

plt.title("RUNOOB Scatter Test") # 设置标题

plt.show()

实操代码训练——将气泡大小从小到大排列

# matplotlib中文网 https://www.matplotlib.org.cn/intro/
# 需求一: 将散点图绘制成气泡图,气泡从左到右越来越大
# 需求二: 将所有气泡设置为橙色
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据
x_speed = np.arange(10, 210, 10)
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
                       17.7, 24.1, 31.5, 39.9, 49.2,
                       59.5, 70.8, 83.1, 96.4, 110.7,
                       126.0, 142.2, 159.4, 177.6, 196.8]
# 绘制气泡图
###################################################
###################################################
# 展示图表
plt.show()
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据

x_speed = np.arange(10, 210, 10)
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
                       17.7, 24.1, 31.5, 39.9, 49.2,
                       59.5, 70.8, 83.1, 96.4, 110.7,
                       126.0, 142.2, 159.4, 177.6, 196.8])


# 绘制气泡图
plt.scatter(x_speed,y_distance,c='orange',alpha=0.5)
# 展示图表
plt.show()

4.使用pyplot 的 errorbar() 函数可以快速绘制误差棒图,errorbar() 函数语法格式如下

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, *, data=None, **kwargs)。

x,y:主要定于二维数据的横纵坐标值

yerr :定义y轴方向的误差棒的大小,可以是一个数,也可以是二维数组(分别传递平均值与最小值的差和最大值与平均值的差)。

xerr:定义y轴方向的误差棒的大小,同样也可以是一个数,也可以是二维数组。

fmt:定义数据折线和数据点的样式。

ecolor:定义误差棒的颜色。

elinewidth:定义误差棒线的宽度。

capsize:定义误差棒帽的大小(长度)。

capthick:定义误差棒帽的宽度。

alpha:设置透明度(范围:0-1)。

marker:设置数据点的样式

markersize(简写ms):定义数据点的大小。

markeredgecolor(简写mec):定义数据点的边的颜色,可使用官方提供的缩写字母代表的简单颜色,也可以使用RGB颜色和HTML十六进制#aaaaaa格式的颜色(具体可参考matplotlib.colors)。

markeredgewidth( 简写mew ):定义数据点的边的宽度。

markerfacecolor(简写 mfc):定义数据点的颜色。

linestyle:设置折线的样式,设置成none可将折线隐藏。

label:添加图例。

示例代码如下

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y = (25, 32, 34,25,20)
y_offset = (3,5,2,3,3)
plt.errorbar(x,y,y_offset,capsize=3,capthick=2)
plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值