跟我一起学点数据分析 -- 第五天:数据可视化(matplotlib部)

在这里插入图片描述

前文回顾

跟我一起学点 数据分析 – 第四天:上手pandas(4)

说实话,这两天我没有写博客,并不是去休息了,是在实战。
但是我实战为什么这么久?因为学的不扎实。
为什么学的不扎实,我觉得我不负全责。

反正总结一点就是,这个系列我会全部推翻重写。
然后,买课之前一定要先加QQ群,跟老师搭上话,不然别交钱。


数据集

这里我们获取seaborn的自带数据集,我选:anscombe,这个数据集还是挺出名的。

import seaborn as sns

anscombe = sns.load_dataset('anscombe')

print(anscombe)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

当然,不知道什么原因,不让我下。
网上也不好找,还要我去注册个码云。

过两天我在我的侧栏挂个公众号,你们来回复“seaborn测试数据集”就好啦。

然后让我们来了解一下这个数据集哈:但当涉猎
(数据集不止这一个,所以,最好还是下载一整包)


matplotlib绘图入门

为什么先讲matplotlib呢?因为你会发现后面的不论是seaborn还是pandas都离不开这个。
而为什么又说只是个入门呢?因为这个完全可以独立写好几篇博客了,东西实在博大精深了。

matplotlib,是Python的基本绘图库。
好用的很。

来我用给你们看一下:

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('anscombe.csv')

df_1 = df[df['dataset'] == 'I']

plt.plot(df_1['x'],df_1['y'])

plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

草率了点哈,连个颜色区分度都没有。

在这里插入图片描述

默认情况下哈,plot是用线的。如果你想用点的话,可以传个参:
(这让我想起了当初的MATLAB考试)

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('anscombe.csv')

df_1 = df[df['dataset'] == 'I']

plt.plot(df['x'],df['y'],'*')	# 也不是说什么都可以的,要不你换个‘¥’试试?

plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述


绘制多图

matplotlib有个比较神奇的地方,它支持一张大图上有很多个小图组成。

看好。

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('anscombe.csv')

df_1 = df[df['dataset'] == 'I']
df_2 = df[df['dataset'] == 'II']
df_3 = df[df['dataset'] == 'III']
df_4 = df[df['dataset'] == 'IV']

fig = plt.figure()  # 创建画布,用于存放子图

# 将画布分为两行两列
axes1 = fig.add_subplot(2,2,1)  #(坐标(1,1))
axes2 = fig.add_subplot(2,2,2)  #(坐标(1,2))
axes3 = fig.add_subplot(2,2,3)  #(坐标(2,1))
axes4 = fig.add_subplot(2,2,4)  #(坐标(2,2))

# 调用各个轴的方法绘图
axes1.plot(df_1['x'],df_1['y'],'+')
axes2.plot(df_2['x'],df_2['y'],'+')
axes3.plot(df_3['x'],df_3['y'],'+')
axes4.plot(df_4['x'],df_4['y'],'+')

# 向各个图中添加小标题
axes1.set_title('dataset_1')
axes2.set_title('dataset_2')
axes3.set_title('dataset_3')
axes4.set_title('dataset_4')

# 为整幅图添加一个大标题
fig.suptitle('Anscombe Data')

# 使用紧凑布局
fig.tight_layout()

plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

在这里插入图片描述

还可以向每个图设置坐标轴名字,set_xlabel() 和 set_ylabel()。


matplotlib绘制统计图

这里我们选用另一个数据集:tips

直方图

哎,经过我十几分钟的苦战,还是没能给每个柱子配上个颜色。
那就只能先这样了:

在这里插入图片描述

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('tips.csv')

fig = plt.figure()

axes1 = fig.add_subplot(1,1,1)

axes1.hist(df['total_bill'],bins = 10,color = 'g' )

axes1.set_title('Histogram of Total Bill')

axes1.set_xlabel('Frequency')

axes1.set_ylabel('Total Bill')

plt.show()


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

散点图

这组数据啊,我本来以为是两组数据,还准备给它分一下颜色。研究了一会儿,发现它就是一组数据而已。。。
在这里插入图片描述

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('tips.csv')

scatter_plot = plt.figure()

axes1 = scatter_plot.add_subplot(1,1,1)

axes1.scatter(df['total_bill'],df['tip'],color = 'g' )

axes1.set_title('Scatterplot of Total Bill vs Tip')

axes1.set_xlabel('Frequency')

axes1.set_ylabel('Total Bill')

plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

箱线图

说真的,这个图你叫我看我也看不懂:
在这里插入图片描述

import pandas as pd

import matplotlib.pyplot as plt

df = pd.read_csv('tips.csv')

boxplot = plt.figure()

axes1 = boxplot.add_subplot(1,1,1)

axes1.boxplot( # 箱线图的第一个参数是数据 # 由于要绘制多块数据,多以要把每块数据放到列表中(真是麻烦) [ df[df['sex'] == 'Female']['tip'], df[df['sex'] == 'Male']['tip'] ], labels = ['Female','Male']
)

axes1.set_title('Boxplot of Tips by Sex')

axes1.set_xlabel('Sex')

axes1.set_ylabel('Tips')

plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

多变量数据

多变量数据的区分就要看咱个人的聪明才智了。

在这里插入图片描述

import pandas as pd

import matplotlib.pyplot as plt

def record_sex(sex): if sex == 'Female': return 0 else: return 1

df = pd.read_csv('tips.csv')

df['sex_color'] = df['sex'].apply(record_sex)

scatter_plot = plt.figure()

axes1 = scatter_plot.add_subplot(1,1,1)

axes1.scatter( x = df['total_bill'], y = df['tip'], s = df['size']*10, c = df['sex_color'], alpha = 0.5
)

axes1.set_title('Total Bill vs Tip Colored by Sex and Sized by Size')

axes1.set_xlabel('Total Bill')

axes1.set_ylabel('Tips')

plt.show()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

色图

接下来要放色图了啊,大家做好心理准备。

常用颜色

‘b’ # 蓝色(blue)
‘g’ # 绿色(green)
‘r’ # 红色(red)
‘c’ # 青色(cyan)
‘m’ # 品红(magenta)
‘y’ # 黄色(yellow)
‘k’ # 黑色(black)
‘w’ # 白色(white)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

更多颜色

在这里插入图片描述

渐变色

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

混色

在这里插入图片描述

在这里插入图片描述

你要问我怎么用,那我也没用过,先存着。

常用图例

.# 点(point marker),# 像素点(pixel marker)
‘o’ # 圆形(circle marker)
‘v’ # 朝下三角形(triangle_down marker)^# 朝上三角形(triangle_up marker)<# 朝左三角形(triangle_left marker)># 朝右三角形(triangle_right marker)1# (tri_down marker)2# (tri_up marker)3# (tri_left marker)4# (tri_right marker)
‘s’ # 正方形(square marker)
‘p’ # 五边星(pentagon marker)*# 星型(star marker)
‘h’ # 1号六角形(hexagon1 marker)
‘H’ # 2号六角形(hexagon2 marker)+# +号标记(plus marker)
‘x’ # x号标记(x marker)
‘D’ # 菱形(diamond marker)
‘d’ # 小型菱形(thin_diamond marker)|# 垂直线形(vline marker)
‘_’ # 水平线形(hline marker)


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述


一个matplotlib写着写着就这么多了,seaborn、pandas再加上来。。
pyechart要是再上来。
emmm,这篇先到这儿吧就。

文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。

原文链接:lion-wu.blog.csdn.net/article/details/112122718

(完)