Python-Matplotlib可视化(6)——自定义坐标轴让统计图清晰易懂

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

import numpy as np

import matplotlib.ticker as ticker

import matplotlib.pyplot as plt

name_list = (‘Apple’, ‘Orange’, ‘Banana’, ‘Pear’, ‘Mango’)

value_list = np.random.randint(0, 99, size = len(name_list))

pos_list = np.arange(len(name_list))

ax = plt.axes()

ax.xaxis.set_major_locator(ticker.FixedLocator((pos_list)))

ax.xaxis.set_major_formatter(ticker.FixedFormatter((name_list)))

plt.bar(pos_list, value_list, color = ‘c’, align = ‘center’)

plt.show()

控制刻度标签

Tips:我们首先使用ticker.Locator实例来生成刻度的位置,然后使用ticker.Formatter实例将为刻度生成标签。FixedFormatter从字符串列表中获取标签,然后用Formatter实例设置坐标轴。同时,我们还使用了FixedLocator来确保每个标签中心都正好与刻度中间对齐。

更简单的设置方式

虽然使用上述方法可以控制刻度标签,但可以看出此方法过于复杂,如果刻度标签是固定的字符列表,那么可以用以下简单的设置方法:

import numpy as np

import matplotlib.pyplot as plt

name_list = (‘Apple’, ‘Orange’, ‘Banana’, ‘Pear’, ‘Mango’)

value_list = np.random.randint(0, 99, size = len(name_list))

pos_list = np.arange(len(name_list))

plt.bar(pos_list, value_list, color = ‘c’, align = ‘center’)

plt.xticks(pos_list, name_list)

plt.show()

简单的设定坐标刻度标签的方法Tips:使用plt.xticks()函数为一组固定的刻度提供固定标签,此函数接受位置列表和名称列表作为参数值,可以看出,此方法比第一种方法实现起来更简单。

高级刻度标签控制

不仅可以使用固定标签,使用ticker API可以使用函数生成的标签:

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.ticker as ticker

def make_label(value, pos):

return ‘%0.1f%%’ % (100. * value)

ax = plt.axes()

ax.xaxis.set_major_formatter(ticker.FuncFormatter(make_label))

x = np.linspace(0, 1, 256)

plt.plot(x, np.exp(-10 * x), c =‘c’)

plt.plot(x, np.exp(-5 * x), c= ‘c’, ls = ‘–’)

plt.show()

高级刻度标签控制

在此示例中,刻度标签是由自定义函数make_label生成的。此函数以刻度的坐标作为输入,并返回一个字符串作为坐标标签,这比给出固定的字符串列表更灵活。为了使用自定义函数,需要使用FuncFormatter实例——一个以函数为参数的格式化实例。

这种将生成标签的实际任务指派给其他函数的方法称为委托(delegation)模式,这是一种漂亮的编程技术。比方说,我们要将每个刻度显示为日期,这可以使用标准的Python时间和日期函数完成:

import numpy as np

import datetime

import matplotlib.pyplot as plt

import matplotlib.ticker as ticker

start_date = datetime.datetime(1998, 1, 1)

def make_label(value, pos):

time = start_date + datetime.timedelta(days = 365 * value)

return time.strftime(‘%b %y’)

ax = plt.axes()

ax.xaxis.set_major_formatter(ticker.FuncFormatter(make_label))

x = np.linspace(0, 1, 256)

plt.plot(x, np.exp(-10 * x), c =‘c’)

plt.plot(x, np.exp(-5 * x), c= ‘c’, ls = ‘–’)

labels = ax.get_xticklabels()

plt.setp(labels, rotation = 30.)

plt.show()

委托模式示例

Tips:可以利用ax.get_xticklabels()获取刻度标签实例,然后对标签进行旋转,以避免长标签之间重叠,旋转使用plt.setp()函数,其接受刻度标签实例和旋转角度作为参数值。

使用对数刻度


当可视化的数据变化范围非常广时,如果仍然使用常规的坐标轴刻度,将导致数据密集显示,甚至无法看到数据的变化趋势,这时,使用对数刻度就可以对图形进行更好的展示。

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(1, 10, 1024)

plt.yscale(‘log’)

plt.plot(x, x, c = ‘c’, lw = 2., label = r’ f ( x ) = x f(x)=x f(x)=x’)

plt.plot(x, 10 ** x, c = ‘y’, ls = ‘–’, lw = 2., label = r’ f ( x ) = e x f(x)=e^x f(x)=ex’)

plt.plot(x, np.log(x), c = ‘m’, lw = 2., label = r’ f ( x ) = log ⁡ ( x ) f(x)=\log(x) f(x)=log(x)')

plt.legend()

plt.show()

使用对数刻度

若使用常规坐标轴刻度,则图形将变得混乱:

常规坐标轴刻度,相同的图形却变得混乱

Tips:通过向plt.yscale()函数传递'log'参数值来得到对数刻度,;其他可用缩放类型参数值还包括'linear'、'symlog'等。同样,我们也可以使用plt.xscale()在x轴上获得相同的结果默认情况下,对数基数为10,但可以使用可选参数basex和basey进行更改。设置对数刻度适用于任何图形,而不仅仅是曲线图。

同样,使用对数标度也可以用于放大范围非常大的数据上的一个小范围:

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(-100, 100, 4096)

plt.xscale(‘symlog’, linthreshx=6.)

plt.plot(x, np.sinc(x), c = ‘c’)

plt.show()

对数标度

Tips:将"symlog"作为plt.xscale()的参数值,可以设置以0为中心的对称对数刻度,如通过设置"linthreshx=6",指定了对数刻度的范围为[-6, 6],此时,在[-6, 6]范围内使用对数刻度,而超出该范围则使用线性刻度。这样,我们既可以详细地查看某个范围内的数据,同时仍然可以查看大量范围外数据的大致特征。

使用极坐标


有些图形的绘制和角度有着密不可分的关系。例如,扬声器的功率取决于测量的角度。此时,极坐标就是表示此类数据关系的最佳选择。

import numpy as np

import matplotlib.pyplot as plt

t = np.linspace(0 , 2 * np.pi, 1024)

plt.axes(polar = True)

plt.plot(t, 1. + .25 * np.sin(16 * t), c= ‘m’)

plt.show()

使用极坐标

Tips:plt.axes()可以显式的创建一个Axes实例,从而进行一些自定义的设置。只需使用可选的polar参数即可设置使用极坐标。

虽然绘制曲线可能是极坐标最常见的用法。但是,我们也可以使用极坐标绘制其他任何类型的图形,如条形图和形状。例如,使用极坐标和多边形,可以绘制雷达图:

import numpy as np

import matplotlib.patches as patches

import matplotlib.pyplot as plt

ax = plt.axes(polar = True)

theta = np.linspace(0, 2 * np.pi, 8, endpoint = False)

radius = .25 + .75 * np.random.random(size = len(theta))

points = np.vstack((theta, radius)).transpose()

plt.gca().add_patch(patches.Polygon(points, color = ‘c’))

plt.show()

雷达图

Tips:这里所用的多边形坐标是多边形顶点与原点间的角度和距离,不需要执行从极坐标到笛卡尔坐标的显式转换。

系列链接


Python-Matplotlib可视化(1)——一文详解常见统计图的绘制

Python-Matplotlib可视化(2)——自定义颜色绘制精美统计图

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值