可视化笔记1--matplotlib 常见图形绘制1

可视化笔记1--matplotlib 常见图形绘制1

最近需要使用python实现部分数据的可视化,于是简单学习了下matplotlib绘图功能,基本包括:散点图、折线图、条形图、直方图、饼状图、箱形图等几种常用图形的绘制方式,相应学习笔记分享在此处,以便于后续参考。后续若有新功能函数,也会在此处加以补充!

1 环境搭建及小试牛刀

1.1 环境搭建

使用pip安装matplotlib 
pip install matplotlib

1.2 绘制一条直线和折线

源代码如下:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[3,2,1]) #第一维度为[x轴线坐标],第二维度为y轴坐标
plt.show() #直线
plt.plot([1,2,3],[-3,2,1])#斜线,(2,2)为拐点
plt.show()

结果如下:

直线

折线

2 Numpy简介及小试牛刀

2.1 从python基础对象转化

print('Test1!')
testList = [1,2,3,4]
testNP = np.array(testList)
print(testNP)
#结果
Test1!
[1 2 3 4]

2.2 通过numpy内生的函数生成

print('\nTest2!')
testNP2 = np.arange(11)
print(testNP2)
#结果
Test2!
[ 0  1  2  3  4  5  6  7  8  9 10]

2.3 从硬盘(文件)读取

print('\nTest3!')
testNP3 = np.loadtxt('Test.csv',delimiter=',',skiprows=0,usecols=(1,3,5))
# skiprows 是否去掉前n行
print(testNP3.shape) #查看其维度
print(testNP3)
col1,col2,col3 = np.loadtxt('Test.csv',delimiter=',',skiprows=0,usecols=(1,3,5),unpack=True)
#unpack 可以将不同列放在不同的变量中
print(col1.shape,col2.shape,col3.shape)
#结果
Test3!
(9, 3)
[[1.92186580e-02 7.39918324e-01 6.92739011e+00]
 [2.93760812e-01 1.13097913e+01 3.67413910e+01]
 [1.96236090e-02 7.55508963e-01 6.90509116e+00]
 [1.93349450e-02 7.44395396e-01 6.97014908e+00]
 [1.93088890e-02 7.43392210e-01 7.13731147e+00]
 [1.98447450e-02 7.64022700e-01 7.15860926e+00]
 [1.94200260e-02 7.47671001e-01 7.07135229e+00]
 [2.08050220e-02 8.00993342e-01 7.64157691e+00]
 [2.07637100e-02 7.99402824e-01 7.49041704e+00]]
(9,) (9,) (9,)

2.4 创建切片

print('\nTest4!')
testNP4 = np.arange(11)
print(testNP4[0])
print(testNP4[:])
print(testNP4[:5])
print(testNP4[:5])
print(testNP4[::2]) #第一个:表示整个数组,第二个表示步长为2
print(testNP4[::-1]) #逆序
#结果
Test4!
0
[ 0  1  2  3  4  5  6  7  8  9 10]
[0 1 2 3 4]
[0 1 2 3 4]
[ 0  2  4  6  8 10]
[10  9  8  7  6  5  4  3  2  1  0]

2.5 常用函数

#1) np.funcName(x)
print('\nTest5!')
testNP5 = np.random.randint(1,100,10) #在1-100之间创建10个随机数
print(testNP5)
print(np.max(testNP5),' == ',testNP5.max())
#2) 排序
y = np.sort(testNP5) #未改变原数组
print(y,'\n',testNP5)
y= testNP5.sort() #改变原数组
print(testNP5)
#结果
Test5!
[46 61 31 11 78 71 40  2 30 85]
85  ==  85
[ 2 11 30 31 40 46 61 71 78 85] 
 [46 61 31 11 78 71 40  2 30 85]
[ 2 11 30 31 40 46 61 71 78 85]

 

3 散点图

散点图一般可以用于眼见两种变量的相关性,正相关、负相关、无明显相关性 
import以下库
import matplotlib.pyplot as plt
import numpy as np

3.1 身高体重图

heigh = [161,172,188,175,173,165]
weight = [50,58,80,70,69,55]
plt.scatter(heigh,weight)
plt.show()

C3_1

3.2 无相关性

x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x,y)
plt.show()

C3_2

3.3 正相关

x = np.random.randn(1000)
y = x+np.random.randn(1000)*0.5
plt.scatter(x,y)
plt.show()

C3_3

3.4 负相关

x = np.random.randn(1000)
y = -x+np.random.randn(1000)*0.5
plt.scatter(x,y)
plt.show()

C3_4

3.5 外观调整

x = np.random.randn(200)
y = np.random.randn(200)
plt.scatter(x,-y,alpha=0.5)
plt.scatter(x,y,s=50,c='r',marker="^",alpha=0.5)
#s 表示点面积大小,
#c 表示颜色
# marker 点的样式,参考 https://matplotlib.org/api/markers_api.html?highlight=marker#module-matplotlib.markers
# alpha 透明度调整,重叠部分透明度会增加,若值为1则无法看到透明度叠加情况
plt.show()

C3_5

 

4 折线图

折线图是用直线将数据连接起来构成的图形,常用来观察数据随时间变化的趋势,例如股价、温度变化等。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

4.1 普通折线图

x=np.linspace(-10,10,100) #在-10到10之间平均分为100份
y=x**2
plt.plot(x,y)
plt.show()
x=np.linspace(-10,10,8) #在-10到10之间平均分为8份
y=x**2
plt.plot(x,y)
plt.show()

C4_2

C4_2

4.2 横坐标为时间

x = ['01/04/2019', '02/04/2019','03/02/2019', '04/03/2019', '05/04/2019', '06/04/2019', '07/04/2019', '08/04/2019', '09/05/2019', '10/05/2019']
y = np.random.randint(1,10,len(x))
plt.plot_date(x,y,'-') #plt.plot_date(x,y)默认为点图,'-'为线图
plt.show()

C4_3

4.3 参数调节

x = ['01/04/2019', '02/04/2019','03/02/2019', '04/03/2019', '05/04/2019', '06/04/2019', '07/04/2019', '08/04/2019', '09/05/2019', '10/05/2019']
y = np.random.randint(1,10,len(x))
plt.plot_date(x,y,linestyle='--',c='r',marker='^') #默认为点图,'--'为虚线图
plt.plot_date(x,y+2,fmt='-g^') #fmt表示方式
#fmt = '[color][marker][line]' 参考文献:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
#可以调整其linestyle、c、marker参数,也可以调整其fmt参数
plt.show()

C4_4

 

5 条形图

条形图以长方形的长度为变量来统计图表,可用于比较多个项目分类的数据大小,常用于较小的数据集分析,例如产品季度销量、不同国家人口等 
import以下库
import matplotlib.pyplot as plt
import numpy as np

5.1 垂直条形图

x = np.arange(5)
y = [20,10,30,25,15]
plt.bar(x=x,height=y,color='r',width=0.5)
plt.show()

C5_1

5.2 水平条形图

x = np.arange(5)
y = [20,10,30,25,15]
plt.bar(x=0,bottom=x,color='r',width=y,height=0.5,orientation='horizontal')
#plt.barh(y=x,color='r',width=y,height=0.5) #上面方式的等价函数
plt.show()

C5_2

5.3 并列条形图

bar_width=0.3
x_ = np.arange(4)
y1 = [52,55,63,53]
y2 = [44,66,55,41]
plt.bar(x=x_,height=y1,color='b',width=bar_width)
plt.bar(x=x_+bar_width,height=y2,color='r',width=bar_width)
#同理需要三个并列,则需要添加2倍的bar_width
plt.show()

C5_3

5.4 层叠图

bar_width=0.5
x_ = np.arange(4)
y1 = [52,55,63,53]
y2 = [44,66,55,41]
plt.bar(x=x_,height=y1,color='b',width=bar_width)
plt.bar(x=x_,height=y2,color='r',width=bar_width,bottom=y1) #添加bottom参数即可实现层叠图
plt.show()

C5_4

 

6 直方图

直方图有一系列高度不等的条形组成,表示数据分布的情况,如公司人员身高分布。直方图表示的数据可具有连续性,而条形图一般类别固定且不一定有连续性。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

6.1 普通直方图

mn=100 #平均值为100
sigma = 20 #标准差为20
x = mn +sigma*np.random.randn(2000)
plt.hist(x,bins=10,density=True)
#density/normed 是否要对数据标准化,True后纵坐标即为对应的频率
plt.show()

C6_1

6.2 直方图参数调节

mn=100 #平均值为100
sigma = 20 #标准差为20
x = mn +sigma*np.random.randn(2000)
plt.hist(x,bins=50,color='r',density=False)
#density/normed 是否要对数据标准化,True后纵坐标即为对应的频率
#bins 设置直方数量
plt.show()

C6_2

6.3 双变量直方图

#使用颜色深浅表示其频率,频率越高其亮度越亮,常用于分析双变量的联合分布情况
x=np.random.randn(1000)+2 #x的重心在2
y=np.random.randn(1000)+3 #y的重心在3
plt.hist2d(x,y,bins=40)
plt.show()

C6_3

 

7 饼状图

饼状图主要用于显示一系列数据中各项大小和比例,每个数据显示展整个饼状图的百分比。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

7.1 基础饼状图

labels =['A','B','C','D']
y = [15,20,25,40]
plt.pie(x=y,labels=labels,autopct='%.0f%%')
#autopct 显示所占百分比
#explode 用于对某块进行突出显示
plt.show()

C7_1

7.2 参数调节

labels =['A','B','C','D']
y = [15,20,25,40]
explode=[0,0.05,0.08,0]
plt.pie(x=y,labels=labels,autopct='%.0f%%',explode=explode,shadow=True)
#autopct 显示所占百分比
#explode 用于对某块进行突出显示
#shadow 添加阴影
plt.show()

C7_2

 

8 箱形图

箱形图又称盒须图、盒式图或者箱线图,式一种用作显示一组数据分散情况资料的统计图。其包括四种值,在图上显示为:上边缘,上四分位数、中位数、下四分位数,下边缘,异常值。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

8.1 基础箱形图

np.random.seed(100)
data = np.random.normal(size=1000,loc=0,scale=1)
plt.boxplot(data)
plt.show()

C8_1

8.2 参数调节

# np.random.seed(100)
data = np.random.normal(size=1000,loc=0,scale=1)
plt.boxplot(data,sym='.',whis=0.5)
#sym 设置异常值的形状
#whis default = 1.5,值为浮点数,其大小可以调整其上/下边缘到上/下四分位的距离
plt.show()

data = np.random.normal(size=1000,loc=0,scale=1)
plt.boxplot(data,sym='.',whis=2.5)
#sym 设置异常值的形状
#whis default = 1.5,值为浮点数,其大小可以调整其上/下边缘到上/下四分位的距离
plt.show()

C8_2

C8_3

说明

以上默认测试python版本为python3.6.3,matplotlib 3.0.0

猜你喜欢

转载自blog.csdn.net/u011127242/article/details/88245504