初识Python数据可视化(一)

数据可视化涉及用视觉表示来探索分析数据。 它与数据挖掘紧密相关,数据挖掘使用代码来探索数据的联系。 数据集可以是只有一行代码的一小段数字,或是以GB为单位的大量数据。

一个优秀的数据图表远不止是一个好看,更重要的时让人看到他不曾注意到的数据的联系。

借助Python的高效性,你可以很快速的看到一个基于数百万个的数据的数据集,当然也不只限于数字。


人们使用Python进行遗传学,气候研究,政治和经济分析等领域的数据密集型工作。
数据科学家用Python编写了一系列令人印象深刻的可视化和分析工具,您也可以使用其中的许多工具。

最受欢迎的工具之一是一个数学绘图库,matplotlib

我们将使用matplotlib制作简单的图,例如折线图和散点图。之后,我们将基于随机游走的概念创建一个更有趣的数据集-从一系列随机决策中生成的可视化效果。

我们还将使用名为Pygal的程序包,该程序包专注于创建在数字设备上可以正常使用的可视化。

您可以在用户与可视化交互时使用Pygal来强调和调整元素的大小,并且可以轻松地调整整个的大小以适合小型智能手表或大型显示器。

我们将使用Pygal探索以各种方式掷骰子时会发生的情况。


安装 matplotlib

pip install matplotlib

对于python开发者而言,安装第三方库已不是什么难事。笔者不在此处赘述。

要查看可以使用matplotlib进行可视化的种类,请访问http://matplotlib.org/上的示例库。单击图库中的可视化文件时,您可以看到用于生成图的代码。

扫描二维码关注公众号,回复: 10048415 查看本文章

绘制简单的线图

我们使用matplotlib绘制一个简单的折线图,然后对其进行自定义以创建我们数据的更直观的可视化。我们将使用平方数序列1,4,9,16,25作为图形的数据。

只需向matplotlib提供如下所示的数字,剩下的就由matplotlib完成:

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()

代码运行结果:

我们需要导入pyplot模块,为了在代码中重复输入pyplot,我们使用别名plt
pyplot包含许多函数帮助生成图表。

在第3行,我们创建一个列表来保存1~5的平方,然后将其传递给plot()函数。
使用show()打开matplotlib的查看器并显示该图。

若您使用python自带的IDLE运行该代码,结果及界面如下图所示。查看器允许您缩放和导航图,如果单击磁盘图标,则可以保存所需的任何图图像。

若您使用Pycharm运行该代码,结果及界面如下图所示。

后续将只展示Pycharm的运行结果图。


更改标签类型和图形粗细

观察上一段代码的运行结果,显示的数字在增加,但标签类型太小,线条太细。

matplotlib允许您调整可视化的每个功能。

我们将使用一些可用的自定义项来提高该图的可读性,如下所示:

import matplotlib.pyplot as plt

squares = [1, 4, 9, 16, 25]
plt.plot(squares, linewidth=5)

# 设置图表标题和轴标签
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# 设置标签大小
plt.tick_params(axis='both', labelsize=14)

plt.show()

代码运行结果:

第4行,线宽参数linewidth控制plot()生成的线的粗细。 第7行的title()函数设置图表的标题。

在整个代码中反复出现的fontsize参数控制图表上文本的大小。

使用xlabel()ylabel()函数可以为每个轴设置标题,而函数tick_params()可以为刻度线设置样式。该行显示的参数(axes = 'both')会影响x轴和y轴上的刻度线,并将刻度线标签的字体大小设置为14(labelsize = 14)

如您在上图中看到的那样,该图更容易阅读:标签类型较大,折线图较粗。


校正图

注意到了吗?在图形末尾,4.0的平方显示为25!让我们改正它。

当给plot()一个数字列表时,它假定第一个数据点对应于x坐标值0,但我们的第一个点对
应于x值1。

我们可以同时给plot()x的值和y的值。

import matplotlib.pyplot as plt

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)

# 设置图表标题和轴标签
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# 设置标签大小
plt.tick_params(axis='both', labelsize=14)

plt.show()

代码运行结果:

我们新增了x轴的值,并将input_valuessquares同时作为参数传给plot()

在使用plot()时,您可以指定许多参数,并使用许多函数来自定义绘图。在本章中,我们将使用更多有趣的数据集来继续探索这些定制功能。


使用散点图绘制和个性化单个点

有时,能够根据某些特征绘制或设置单个点很有用。例如,您可能以一种颜色绘制较小的值,而以另一种颜色绘制较大的值。您还可以绘制带有一组样式选项的大型数据集,然后通过使用不同的选项重新绘制各个点来强调各个点。

要绘制单个点,需使用scatter()函数。将关注点的单个点(x,y)值传递给scatter(),它将绘制这些值:

import matplotlib.pyplot as plt

plt.scatter(2, 4)
plt.show()

绘制了坐标为(2,4)的点。

代码运行结果:

让我们对输出进行设置样式使其更有趣。

我们将添加一个标题,标记轴,并确保所有文本都足够大以供阅读:

import matplotlib.pyplot as plt

plt.scatter(2, 4, s=200)

# Set chart title and label axes.
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# Set size of tick labels.
plt.tick_params(axis='both', which='major', labelsize=14)

plt.show()

代码运行结果:

在第3行,我们调用scatter()并使用参数s来设置点的大小。


用scatter()绘制一系列点

要绘制一系列点,我们可以传递x和y值列表。

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
plt.scatter(x_values, y_values, s=200)

plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

plt.tick_params(axis='both', which='major', labelsize=14)

plt.show()

代码运行结果:

x_values列表包含要平方的数字,y_values包含每个数字的平方。

将这些列表传递到scatter()时,matplotlib在绘制每个点时会从每个列表中读取一个值。

要绘制的点是(1,1)(2,4)(3,9)(4,16)(5,25)

当然,我们可以显示1~1000的平方:

import matplotlib.pyplot as plt

x_values = [i for i in range(1, 1001)]
y_values = [x ** 2 for x in x_values]
plt.scatter(x_values, y_values, s=40)

plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

plt.tick_params(axis='both', which='major', labelsize=14)

# 设置轴的范围
plt.axis([0, 1100, 0, 1100000])

plt.show()

代码运行结果:

因为这是一个较大数据集,所以我们使用较小的点大小,并使用第14行的axis()函数指定每个轴的范围。

axis()函数需要一个列表作为参数,这个列表需要四个值:x轴的最小值和最大值和y轴的最小值和最大值。


删除数据点轮廓

matplotlib使您可以在散点图中分别为点着色。

带黑色轮廓的默认蓝色圆点非常适合点不多的图。

但是在绘制许多点时,黑色轮廓会融合在一起。要删除点周围的轮廓,需在调用scatter()时传递参数edgecolor ='none'

plt.scatter(x_values, y_values, edgecolors='None', s=40)

自定义颜色

要更改点的颜色,请将参数c赋值要使用的颜色并传递给scatter()如下所示:

import matplotlib.pyplot as plt

x_values = [i for i in range(1, 1001)]
y_values = [x ** 2 for x in x_values]
plt.scatter(x_values, y_values, c='red', edgecolors='None', s=40)

plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

plt.tick_params(axis='both', which='major', labelsize=14)

# 设置轴的范围
plt.axis([0, 1100, 0, 1100000])

plt.show()

在第5行添加参数c并赋值为red,再次运行程序,就会得到下面的图形。

可以通过以下方式指定颜色:

  • 颜色名:如'red’,blue,cyan,green,yellow,magenta,white,black。这八种颜色支持缩写(除了黑色是k, 其他都是首字母)
  • RGB或RGBA:[0,1] 范围内的三元(RGB) 或 四元(RGBA) 元组, 如:(0,0,0.8)
  • 十六进制字符串:如#0F0F0F (RBG) 或 #1F2F3F4F (RGBA)
  • 浮点字符串:[0,1]范围内的所有数字的字符串,'0'为黑色,'1'为白色,'0.5'为灰色,从0到1逐渐由黑到白。

使用色彩图

色图是从开始颜色到结束颜色的一系列渐变颜色。

彩色图用于可视化中以强调数据中的图案。

例如,您可以将低值设置为浅色,将高值设置为深色。

pyplot模块包括一组内置的颜色图。

要使用这些颜色图之一,您需要指定pyplot应如何为数据集中的每个点分配颜色。

以下是根据每个点的y值为其分配颜色的方法:

import matplotlib.pyplot as plt

x_values = [i for i in range(1, 1001)]
y_values = [x ** 2 for x in x_values]
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolors='None', s=40)

plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

plt.tick_params(axis='both', which='major', labelsize=14)

# 设置轴的范围
plt.axis([0, 1100, 0, 1100000])

plt.show()

我们将y_values列表传递给c,然后通过cmap参数告诉pyplot使用哪个颜色图。

此代码将y值较低的点涂成浅蓝色,将y值较大的点涂成深蓝色。

你可以在http://matplotlib.org/上的pyplot中查看所有可用的颜色图。转到Examples,向下滚动到颜色示例,然后单击colormaps_reference


自动保存图

如果要让程序将图自动保存到文件中,可以将plt.show()替换为plt.savefig()

import matplotlib.pyplot as plt

x_values = [i for i in range(1, 1001)]
y_values = [x ** 2 for x in x_values]
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolors='None', s=40)

plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

plt.tick_params(axis='both', which='major', labelsize=14)

# 设置轴的范围
plt.axis([0, 1100, 0, 1100000])

plt.savefig('squares_plot.png', bbox_inches='tight')

第一个参数是图像的文件名,它将与代码保存在同一目录中。

第二个参数修剪图中多余的空白。如果要在绘图周围留有多余的空格,则可以忽略此参数。

发布了6 篇原创文章 · 获赞 5 · 访问量 203

猜你喜欢

转载自blog.csdn.net/llllleiya/article/details/104705732