文章目录

  • 1.配置问题
  • 2. 简单绘图
  • 3.使用面向对象方式绘图
  • 4.Figure类和Axes类
    • 语法
    • 实例
  • 5.subplots()函数创建多子图
    • 语法
    • 实例
  • 6.轴刻度限制
    • 语法
  • 7.双轴设置
    • 语法
    • 实例
  • 8.条形图
    • 语法
    • 实例
    • 对普通条形图进行一下优化
    • 并列条形图(通过平移每个x值做两次bar图实现)实例
    • 堆积条形图(通过bar()的bottom参数二次作图基底设为第一次的高度来实现)示例
  • 9.饼图
    • 语法
    • 实例
  • 10.散点图
    • 实例
  • 11.直方图和密度曲线
    • 语法
    • 实例
  • 12.关键词频统计
    • 语法
    • 实例
  • 13.Andrews曲线

1.配置问题

字体乱码问题:

找到文件夹’\Users\用户名\.matplotlib’,打开fontList.json,查找中文字体如simHei,song,kai等,分别对应简体黑、宋体、楷体等,其对应的name字段值即为我们接下来将要设置的中文字体名,复制下来,代码首行插入:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Heiti TC']    # 指定默认字体:解决plot不能显示中文问题
plt.rcParams['axes.unicode_minus'] = False           # 解决保存图像是负号'-'显示为方块的问题

2. 简单绘图

导入pyplot和numpy模块:

import matplotlib.pyplot as plt
import numpy as np

绘制出 − π - π −π到 π π π之间的正弦和余弦曲线:

X = np.arange(-np.pi, np.pi, 0.05)  # 创建一个等差数列
C,S = np.cos(X),np.sin(X)
plt.plot(X, C, color="blue", linewidth=1.0, linestyle="-")
plt.plot(X, S, color="green", linewidth=1.0, linestyle="-")
plt.xlabel("弧度")
plt.ylabel("正弦值或余弦值")
plt.title("正弦波和余弦波")plt.savefig('./test.jpg')   #注意,savefig要放在plt.show()的前面,否则可能保存的图片是空白
plt.show()

结果:

3.使用面向对象方式绘图

虽然直接使用matplotlib.pyplot模块很容易快速绘图,但建议使用面向对象的方法,它可以更好地控制和自定义绘图,也拥有更丰富强大的功能,主要思想是创建figure对象和axes对象,然后只调用这两个对象的方法或属性来绘图。

4.Figure类和Axes类

语法

首先要创建画布,就是创建figure对象,Figure类是所有元素的顶级容器。通过从pyplot模块调用figure()函数进行实例化:

fig = plt.figure(figsize=(12,9),dpi= 200)   # figsize:指定figure的宽和高;dpi:指定每英寸多少个像素

接下来创建Axes对象,这是后续要继续创建各个元素的顶级容器,参数为列表[左位置,底位置,宽占比,高占比],一般取[0.1, 0.1, 0.8, 0.8]

ax = fig.add_axes([0.1,0.1,0.8,0.8])

实例

y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure(figsize=[12,9], dpi=200)      # 创建Figure对象
ax = fig.add_axes([0.1,0.1,0.8,0.8])    # 基于fig对象调用add_axes方法创建Axes对象,参数为列表[左位置,底位置,宽占比,高占比]
l1 = ax.plot(x1,y,color='y',marker='s', linestyle='-', linewidth=2)
l2 = ax.plot(x2,y,color='g',marker='o', linestyle='--', linewidth=2)
ax.legend(labels = ['电视','智能手机'], loc = 'best', fontsize=15)    # 添加图例,loc参数指定位置(best自动最优位置)
ax.grid(True)       # 网格开启
ax.set_title('广告对销售的影响', fontsize=25)
ax.xaxis.set_tick_params(labelsize=15) # 设置x轴数字大小
ax.yaxis.set_tick_params(labelsize=15)
ax.set_xlabel('媒介', fontsize=20)
ax.set_ylabel('销售', fontsize=20)
plt.show()

结果:

5.subplots()函数创建多子图

语法

fig,ax = plt.subplots(nrows, ncols)

函数plt.subplots()返回一个图形对象Figure类型和一个包含等于nrows * ncolsaxes轴对象的NumPy array类型,每个轴对象都可通过索引访问。

实例

fig,ax = plt.subplots(2,2)x = np.arange(1,20)
ax[0][0].plot(x,x**2)
ax[0][0].set_title('平方')
ax[0][1].plot(x,np.sqrt(x))
ax[0][1].set_title('平方根')
ax[1][0].plot(x,np.exp(x))
ax[1][0].set_title('指数')
ax[1][1].plot(x,np.log10(x))
ax[1][1].set_title('对数')plt.show()

结果:

6.轴刻度限制

语法

通过set_xlim(start, stop)set_ylim(start,stop)函数设置轴刻度限制,例如:

ax.set_ylim(0,10000)

7.双轴设置

语法

当在同一个图中绘制具有不同单位的多个曲线时,Matplotlib通过twinx()twiny()函数支持此功能

实例

fig = plt.figure()
ax1 = fig.add_axes([0.1,0.1,0.8,0.8])
x = np.arange(1,10)
ax1.plot(x,np.exp(x))
ax1.set_ylabel('exp')
ax2 = ax1.twinx()   #twinx()是最常用的,在原轴图的基础上绘制双y轴图
ax2.plot(x,np.log(x),'r')
ax2.set_ylabel('log')
fig.legend(labels = ['exp','log'],loc = 'best')
plt.show()

结果:

8.条形图

语法

ax.bar(x, height, width, bottom, align)

其中必选参数为x(x轴数值或标签组成的序列)和height(y轴数值组成的序列)

实例

fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
x = ['C','C++','Python','Java','PHP']
students = list()
for i in range(5):students.append(random.randint(0,50))ax.bar(x,students) plt.show()

结果:

对普通条形图进行一下优化

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
x = ['C', 'C++', 'Python', 'Java', 'PHP']
students = list()
for i in range(5):students.append(random.randint(0, 50))ax.bar(x,students,alpha=0.5,    # 透明度edgecolor='red'  # 边框颜色
)for a, b, label in zip(x, students,students):   #内置函数zip():将几个列表合并为二维列表并转置,返回一个特殊对象,可通过list()列表化之后查看plt.text(a, b, label, horizontalalignment = 'center', fontsize = 10)   #plt.text()函数:在图中(a,b)位置添加一个文字标签label; horizontalalignment水平位置取中间;fontsize字体大小
ax.set_xlabel('专业')
ax.set_ylabel('学生人数')
ax.set_title('不同专业学生分布统计')plt.show()

结果:

并列条形图(通过平移每个x值做两次bar图实现)实例

fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
x_tags = ['C','C++','Python','Java','PHP']
x = list(np.arange(5))total_width, n = 0.8, 2
width = total_width / nstudents = list()
for i in range(10):students.append(random.randint(0,50))
students = np.array(students)
students = students.reshape(2,5)    #这几步借用随机数和ndarray对象改变数组结构来灵活生成想要的2行5列随机序列ax.bar(x, students[0], color = 'r', width = width)
for i in range(len(x)):x[i] = x[i] + width
ax.bar(x, students[1], color = 'b', width = width,tick_label = x_tags)  #tick_label参数给该bar图的x轴加上标签
ax.legend(labels=['女', '男'])plt.show()

结果:

堆积条形图(通过bar()的bottom参数二次作图基底设为第一次的高度来实现)示例

N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
width = 0.35
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
ax.bar(ind, menMeans, width, color='r')
ax.bar(ind, womenMeans, width,bottom=menMeans, color='b')
ax.set_ylabel('分数')
ax.set_title('按组和性别分数')
ax.legend(labels=['男', '女'])plt.show()

结果:

9.饼图

语法

matplotlib.pyplot.pie( x, explode=None, labels=None, colors=None, autopct=None, shadow=False, labeldistance=1.1)

实例

fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
x_tags = ['C','C++','Python','Java','PHP']
students = [23,17,35,29,12]
explode = (0, 0, 0.1, 0, 0)    # 爆炸主要用来在某几块占比太小文字重叠时使用,这里表示只爆炸第二块饼,爆炸距离是半径的0.1。ax.axis('equal') # 等价于 ax.set(aspect='euqal'),使得饼图在figure窗口放大缩小的过程中,保持圆形不变。
ax.pie(students,labels = x_tags, explode=explode,autopct='%.1f%%',shadow=True)   #autopct显示每块饼的百分比属性且自定义小数点位数plt.show()

结果:

10.散点图

实例

girls_grades = [34, 25, 40, 40, 50, 66, 71, 67, 80, 89]
boys_grades = [30, 29, 49, 48, 56, 70, 55, 81, 70, 85]
homework_finish = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
ax.scatter(homework_finish, boys_grades, color = 'b', alpha = 0.5)
ax.scatter(homework_finish, girls_grades, color = 'r', alpha = 0.5)
ax.set_title('散点图实例')
ax.set_xlabel('作业完成情况(%)')
ax.set_ylabel('成绩')
ax.legend(labels = ('男生','女生'))plt.show()

结果:

11.直方图和密度曲线

语法

对于一维数据的可视化,一般使用直方图和核密度曲线,seaborn.distplot()函数可以方便地在同一图像上进行直方图和密度曲线的绘制,语法如下:

import seaborn as snssns.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)

常用参数:

bins:int或list,控制直方图的划分,比如[0,1,2,3]以0,1,2,3为分割点,形成区间[0,1],[1,2],[2,3],区间外的值不计入

hist:是否显示直方图(默认为True)

kde:是否显示核密度估计(默认为True)

rug:控制是否生成观测数值的小细条

hist_kws, kde_kws, rug_kws, fit_kws:接收字典类型,可以自行定义更多高级的样式

实例

# 已有salarys是一个薪资列表,每个值已经除以1000
plt.figure(dpi=200)
sns.distplot(salarys, hist = True, kde = True, kde_kws={"color":"r", "lw":1.5, 'linestyle':'-'})
plt.axvline(mean, color='r', linestyle=":")
plt.text(mean, 0.01, '平均薪资: %.1f千'%(mean), color='r', horizontalalignment = 'center', fontsize = 15)
plt.xlim(0,50)
plt.xlabel('薪资分布(单位:千)')
plt.title('数据分析岗位在全国主要城市的薪资分布')
plt.savefig('./数据分析岗位在全国主要城市的薪资分布.jpg')
plt.show()

结果:

12.关键词频统计

语法

词云图是一种用来展现高频关键词的可视化表达,通过文字、色彩、图形的搭配,产生有冲击力地视觉效果,而且能够传达有价值的信息。wordcloud是优秀的词云展示第三方库,它把词云当作一个WordCloud对象,绘制词云的形状,尺寸和颜色都可以设定。

cloud = WordCloud(Parameters).generate(words_str) # word_str:以空格分隔的词组成的字符串

实例

# words是一个由空格分隔的职位技能要求词组成的字符串
cloud = WordCloud(font_path='/System/Library/Fonts/STHeiti Light.ttc',    # 设置字体文件获取路径,默认字体不支持中文background_color='white',    # 设置背景颜色  默认是blackmax_words=20,    # 词云显示的最大词语数量random_state = 1,  # 设置随机生成状态,即多少种配色方案collocations = False,    # 是否包括词语之间的搭配,默认True,可能会产生语意重复的词语width=1200, height=900      #设置大小,默认图片比较小,模糊
).generate(words)
plt.figure(dpi=200)
plt.imshow(cloud)   # 该方法用来在figure对象上绘制传入图像数据参数的图像
plt.axis('off')     # 设置词云图中无坐标轴
plt.savefig("./技能关键词频统计.jpg")
plt.show()

结果:

13.Andrews曲线

Andrews曲线是一种用来对多维数据降维可视化的工具

df = pd.read_csv('data.csv')
plt.figure(figsize=(12,9),dpi= 100)
pd.plotting.andrews_curves(df, 'Stage_Class', color=['r','b','g']) # 第二个参数:二维表中类别列的列名
plt.grid(alpha=0.3)
plt.show()

Python数据可视化整理相关推荐

  1. 超硬核的 Python 数据可视化教程!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:机器学习算法那些事 Python实现可视化的三个步骤: ...

  2. 超硬核的 Python 数据可视化教程

    来源:数据分析1480 本文约3000字,建议阅读6分钟 本文为你介绍Python实现可视化的三个步骤. Python实现可视化的三个步骤: 确定问题,选择图形 转换数据,应用函数 参数设置,一目了然 ...

  3. Python数据可视化教程之基础篇

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 开运张 | 作者 知乎专栏 | 来源 https://zhuanlan.zhihu.c ...

  4. python数据可视化的特点_python的数据分析到底是啥?python数据可视化怎么做?

    python是个啥?它一个强大的编程语言.数据分析是个啥?它一目了然,就是将数据进行分析,看看能得出什么结论.那python的数据分析到底是啥?其实就是通过这个语言将数据分析做出来,更加便捷化,更加速 ...

  5. python数据可视化基础

    为了满足兄弟的需求,我强迫自己把数据可视化基础又从头到尾复习了一遍, 我总结了利用python实现可视化的三个步骤: 确定问题,选择图形 转换数据,应用函数 参数设置,一目了然 1 首先,要知道我们用 ...

  6. Python数据可视化(微课版)-简介

    前 言 当前,我们正处于大数据爆发的时代,涌现出大量不同类型的时空数据和非时空数据,信息激流使个人.企业和社会对大数据的依赖不断深化,与此同时,数据可视化研究已成为一个新的时代命题,与立体建模等方法相 ...

  7. 大数据可视化python_大数据分析之Python数据可视化的四种简易方法

    本篇文章探讨了大数据分析之Python数据可视化的四种简易方法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 数据可视化是任何数据科学或机器学习项目的一个重要组成部分 ...

  8. Python 数据可视化的 3 大步骤,你知道吗?

    Python实现可视化的三个步骤: 确定问题,选择图形 转换数据,应用函数 参数设置,一目了然 1.首先,要知道我们用哪些库来画图? matplotlib Python中最基本的作图库就是matplo ...

  9. Python数据可视化的3大步骤,你知道吗?

    Python实现可视化的三个步骤: 确定问题,选择图形 转换数据,应用函数 参数设置,一目了然 喜欢本文记得收藏.关注.点赞. 注:技术交流.资料获取,文末见 1.首先,要知道我们用哪些库来画图? m ...

最新文章

  1. MATLAB学习(一)
  2. Linux学习之服务器搭建——基础网络配置
  3. Java黑皮书课后题第5章:5.13(求满足n的三次方<12000的n的最大值)使用while循环找出满足n的三次方<12000的n的最大值
  4. 从系统中取得指定资源图像(转载)
  5. 快讯:2018 OOW Oracle技术大会PPT抢鲜下载
  6. 02-CSS基础与进阶-day4__2018-08-31-21-33-03
  7. 【printf函数与scanf函数】(学习笔记5--标准I/O函数)
  8. FireBug不能用了?使用火狐Try Xpath插件替代Firebug和Firepath
  9. 针式打印机打印发虚_针式打印机打印输出字符模糊不清晰的原因有哪些
  10. 如何免费将XPS转Word格式
  11. android webview 跳转到浏览器,Android WebView或手机浏览器打开连接问题解决办法总结...
  12. 【金三银四】一个问题就知道你会不会CSS了
  13. Android 编译之make基础(转)
  14. Python3 遇到\\u开头的编码
  15. 【vue js】省市区js数据转为tree结构
  16. [IT 男人帮 11-11] 毕业一年写给自己的警戒书-褪墨
  17. Not registered via @EnableConfigurationProperties or marked as Spring component
  18. vscode 安装 codex插件
  19. python正则表达式匹配专利号
  20. java设计程序实验报告,实验报告一

热门文章

  1. Scrapy 浅入浅出
  2. 苹果X 顶部和底部留白问题
  3. 从B站审核变慢现象,聊聊谛听安全内容社区产品的内容风控
  4. 又有12款APP违规收集用户信息,下架整改
  5. 刘霄前端技术开发日志
  6. 《python编程:从入门到实践》 练习题 4-11
  7. 在手机触摸屏领域应用的触摸芯片
  8. 栈、队列、数组的区别
  9. 内存拷贝函数memcpy相关解析(C语言)
  10. DOS环境下出现“ ‘javac‘不是内部或外部命令,也不是可运行的程序或皮处理文件 “的报错的解决方法