数据可视化分析1.2

数据可视化分析1.2

  • Matplotlib部分
    • 给折线图增加更多细节
      • marker——数据点标示
      • 绘制多条折线
      • 开启网格功能
      • 利用风格文件美化图表
    • 带阴影的折线图
      • 利用Pandas导入数据
      • 绘制折线图
      • 增加阴影
      • 设置临界线
      • 条件语句筛选阴影位置
      • 增加更多细节

Matplotlib部分

利用Python可视化这里主要介绍matplotlib。
Pyecharts和Seaborn在未来有机会再系统介绍。

给折线图增加更多细节

marker——数据点标示

from matplotlib import pyplot as plt

x=[-1,1,2,3,4]
y=[-1,1,2,3,4]

plt.xlabel('x轴数据')
plt.ylabel('y轴数据')
plt.title('示例1')
plt.plot(x,y)

数据可视化分析1.2_第1张图片
工作中绘制折线图往往需要把数据点用不同的细节标示出来,此处则应设置marker参数:

plt.plot(x,y,marker='.')

把刚才的plot语句增加marker参数后:
数据可视化分析1.2_第2张图片
点的大小调节用markersize参数:plt.plot(x,y,marker='.',markersize=10)
点的颜色调节用color参数:plt.plot(x,y,marker='.',color='red'),这里的color可以使用HEX码自行设定,如plt.plot(x,y,marker='.',color='#2614e8')
线对粗细用linewidth参数:plt.plot(x,y,marker='.',linewidth=3)
点边界颜色调节用markeredgecolor参数:plt.plot(x,y,marker='.',markeredgecolor='blue')
线形调节用linestyle参数:plt.plot(x,y,marker='.',linestyle='dashed')

总体效果:
plt.plot(x,y,marker='.',markersize=10,color='red',linewidth=3,markeredgecolor='blue')
数据可视化分析1.2_第3张图片

绘制多条折线

from matplotlib import pyplot as plt
dev_x = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
py_dev_y = [45372, 48876, 53850, 57287, 63016,65998, 70003, 70000, 71496, 75370, 83640]
plt.plot(dev_x,dev_y)
plt.plot(dev_x,py_dev_y)

用两个plot语句就能在一张图纸上绘制两个折线图:
数据可视化分析1.2_第4张图片
为了让哪条线对应的是哪个数据更加明显,需要增加图示,使用label参数:plt.plot(x轴数据,y轴数据, label='名字')
对上图代码进行补充:

from matplotlib import pyplot as plt
dev_x = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
py_dev_y = [45372, 48876, 53850, 57287, 63016,65998, 70003, 70000, 71496, 75370, 83640]
plt.plot(dev_x,dev_y,label='所有开发人员')
plt.plot(dev_x,py_dev_y,label='python开发人员')
plt.legend()

注意:使用label参数后要显示图示,需要增加一条plt.legend()语句。由于我是用jupyter notebook编写,可以省略plt.show()语句,如果不是交互式笔记本在运行程序时需要最后增加plt.show()语句才能显示可视化图表。
数据可视化分析1.2_第5张图片
这里增加第三条数据,再用marker优化一下图表:

from matplotlib import pyplot as plt
dev_x = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
py_dev_y = [45372, 48876, 53850, 57287, 63016,65998, 70003, 70000, 71496, 75370, 83640]
js_dev_y = [37810, 43515, 46823, 49293, 53437,56373, 62375, 66674, 68745, 68746, 74583]
plt.plot(dev_x,dev_y,'r--',label='所有开发人员')
plt.plot(dev_x,py_dev_y,'b^--',label='python开发人员')
plt.plot(dev_x,js_dev_y,'go--',label='Js开发人员')
plt.legend()
plt.title('不同语言开发人员不同年龄收入情况')
plt.xlabel('年龄')
plt.ylabel('收入')

数据可视化分析1.2_第6张图片
这里使用了简化写法:(fmt模式)

plt.plot(dev_x,dev_y,[fmt],label='所有开发人员')
#  fmt=[颜色][marker][linestyle]
#  'go--'表示color='green',marker='o',linestyle='dashed',linewidth=2,markersize=12

具体可以根据自己matplotlib版本参考官方文档:3.3.2matplotlib.pyplot中plot参数

开启网格功能

为了更清晰地获取图片数据信息,需要用grid参数开启网格功能:plt.grid()

from matplotlib import pyplot as plt
dev_x = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
py_dev_y = [45372, 48876, 53850, 57287, 63016,65998, 70003, 70000, 71496, 75370, 83640]
js_dev_y = [37810, 43515, 46823, 49293, 53437,56373, 62375, 66674, 68745, 68746, 74583]
plt.plot(dev_x,dev_y,'r--',label='所有开发人员')
plt.plot(dev_x,py_dev_y,'b^--',label='python开发人员')
plt.plot(dev_x,js_dev_y,'go--',label='Js开发人员')
plt.legend()
plt.title('不同语言开发人员不同年龄收入情况')
plt.xlabel('年龄')
plt.ylabel('收入')
plt.grid()

数据可视化分析1.2_第7张图片

利用风格文件美化图表

首先查看一下有什么风格:print(plt.style.available)
[‘Solarize_Light2’, ‘_classic_test_patch’, ‘bmh’, ‘classic’, ‘dark_background’, ‘fast’, ‘fivethirtyeight’, ‘ggplot’, ‘grayscale’, ‘seaborn’, ‘seaborn-bright’, ‘seaborn-colorblind’, ‘seaborn-dark’, ‘seaborn-dark-palette’, ‘seaborn-darkgrid’, ‘seaborn-deep’, ‘seaborn-muted’, ‘seaborn-notebook’, ‘seaborn-paper’, ‘seaborn-pastel’, ‘seaborn-poster’, ‘seaborn-talk’, ‘seaborn-ticks’, ‘seaborn-white’, ‘seaborn-whitegrid’, ‘tableau-colorblind10’]

现在使用一个风格对比一下:

plt.plot(dev_x,dev_y,'r--',label='所有开发人员')
plt.plot(dev_x,py_dev_y,'b^--',label='python开发人员')
plt.plot(dev_x,js_dev_y,'go--',label='Js开发人员')
plt.legend()
plt.title('不同语言开发人员不同年龄收入情况')
plt.xlabel('年龄')
plt.ylabel('收入')
plt.style.use('tableau-colorblind10')
plt.rcParams['font.sans-serif'] = ['SimHei']

数据可视化分析1.2_第8张图片
还可以用动漫风格:plt.xkcd(),但要注意 plt.xkcd()没有中文字库,只适用于纯英文图表。

from matplotlib import pyplot as plt
dev_x = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
dev_y = [38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752]
py_dev_y = [45372, 48876, 53850, 57287, 63016,65998, 70003, 70000, 71496, 75370, 83640]
js_dev_y = [37810, 43515, 46823, 49293, 53437,56373, 62375, 66674, 68745, 68746, 74583]
plt.xkcd()
plt.plot(dev_x,dev_y,'r--',label='All')
plt.plot(dev_x,py_dev_y,'b^--',label='python')
plt.plot(dev_x,js_dev_y,'go--',label='Js')
plt.grid()
plt.legend()
plt.title('Title')
plt.xlabel('Age')
plt.ylabel('Income')
plt.show()

数据可视化分析1.2_第9张图片

带阴影的折线图

利用Pandas导入数据

import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('data.csv')

数据结构如图:
数据可视化分析1.2_第10张图片

绘制折线图

plt.plot(data['Age'],data['All_Devs'],label='All')
plt.plot(data['Age'],data['Python'],label='Python')
plt.legend()

数据可视化分析1.2_第11张图片

增加阴影

阴影参数:plt.fill_between()

plt.fill_between(data['Age'],data['Python'])

数据可视化分析1.2_第12张图片
会发现这样反而导致折线图很不清晰,这里可以调整透明度:alpha=0.2

plt.fill_between(data['Age'],data['Python'],alpha=0.2)

数据可视化分析1.2_第13张图片

设置临界线

临界线设置为60000:overall_mid=60000

overall_mid=60000
plt.fill_between(data['Age'],data['Python'],overall_mid,alpha=0.2)

数据可视化分析1.2_第14张图片

条件语句筛选阴影位置

plt.fill_between(data['Age'],data['Python'],overall_mid,where=(data['Python'] > overall_mid),alpha = 0.2)

数据可视化分析1.2_第15张图片
这里看上去有些突兀,可以用渐变参数优化:interpolate=True

plt.fill_between(data['Age'],data['Python'],overall_mid,where=(data['Python'] > overall_mid),interpolate=True,alpha = 0.2)

数据可视化分析1.2_第16张图片

增加更多细节

可以用color=‘颜色’控制阴影区域颜色,label增加标签。

plt.fill_between(data['Age'],data['Python'],data['All_Devs'],where=(data['Python'] > data['All_Devs']),interpolate=True,alpha = 0.2,label='Python > All')
plt.fill_between(data['Age'],data['Python'],data['All_Devs'],where=(data['Python'] <= data['All_Devs']),interpolate=True,alpha = 0.2,color='red',label='Python <= All')

数据可视化分析1.2_第17张图片

系列文章:
matplotlib中文字体不显示解决办法
数据可视化分析1.1

你可能感兴趣的:(可视化,python,数据可视化,数据分析)