Python 数据可视化

简介: Python 数据可视化

Python 数据可视化

Python提供了多个用于数据可视化的工具和库。其中最常用的包括:

1. Matplotlib:Matplotlib 是一个用于绘制二维图形的 Python 库。它提供了广泛的绘图选项,可以帮助您创建线图、散点图、柱状图、饼图、等高线图、3D 图形等。

2. Seaborn:Seaborn 是基于 Matplotlib 的图形可视化库,它主要用于绘制统计分析结果的图表和数据集。相比于 matplotlib 包,seaborn 包提供了更为美观、更为精美的可视化效果。

3. Plotly:Plotly 是一个交互式数据可视化库,在数据科学领域十分受欢迎。它支持大量的 2D/3D 图表类型,并且具备强大的交互元素如缩放、平移、悬停等等。

4. Bokeh:Bokeh 是一个面向现代网页的交互式可视化工具。它支持多种语言(Python、R 和 Julia)并非常适用于大规模数据集的可视化展示。

5. Pandas data visualization:Pandas 数据可视化是 Pandas 库内置的一种数据可视化工具,它可以促使你通过 DataFrames 和 Series 数据结构,快速生成多样性的图表。

这些库和工具都有不同的功能和应用场景,可以根据具体需求选择合适的工具进行数据可视化。

下面是一些使用不同库进行数据可视化的示例:

1. Matplotlib:用 Matplotlib 绘制折线图、散点图和柱状图。
```python
import matplotlib.pyplot as plt
import numpy as np
# 折线图
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.show()
# 散点图
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
plt.scatter(x, y, c=colors)
plt.show()
# 柱状图 
x = ['A', 'B', 'C', 'D']
y = [3, 8, 1, 10]
plt.bar(x, y)
plt.show()
```
2. Seaborn:在 Seaborn 中绘制散点图和直方图。
```python
import seaborn as sns
import numpy as np
# 散点图
x = np.random.normal(size=100)
y = np.random.normal(size=100)
sns.scatterplot(x=x, y=y)
plt.show()
# 直方图
data = np.random.normal(size=100)
sns.histplot(data=data, kde=True)
plt.show()
```
3. Plotly:用 Plotly 绘制交互式热力图和二维散点图。
```python
import plotly.express as px
import numpy as np
# 热力图
z = np.random.rand(10, 10)
fig = px.imshow(z, color_continuous_scale='OrRd')
fig.show()
# 二维散点图
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
fig = px.scatter(x=x, y=y, color=colors)
fig.show()
```
4. Bokeh:用 Bokeh 绘制交互式时序数据图。
```python
from bokeh.plotting import figure, output_file, show
import pandas as pd
# 读取数据
data = pd.read_csv('temperature_data.csv')
x = pd.to_datetime(data['datetime'])
y = data['temperature']
# 绘制曲线
output_file('temp_plot.html')
p = figure(title="Temperature Data", x_axis_label='Time', y_axis_label='Temperature')
p.line(x, y)
show(p)
```
5. Pandas 数据可视化:对 Pandas 的 Series 和 DataFrame 对象直接调用 `plot()` 函数即可绘制不同类型的图表,如折线图、散点图、柱状图、饼图等。下面以折线图为例:
```python
import pandas as pd
import numpy as np
# 创建 Series 对象
dates = pd.date_range(start='20210101', end='20210110', periods=10)
ts = pd.Series(np.random.randn(10), index=dates)
# 绘制折线图
ts.plot()
```

Example 1 :散点图、密度图(Python)

import numpy as np
import matplotlib.pyplot as plt
# 创建随机数
n = 100000
x = np.random.randn(n)
y = (1.5 * x) + np.random.randn(n)
fig1 = plt.figure()
plt.plot(x,y,'.r')
plt.xlabel('x')
plt.ylabel('y')
plt.savefig('2D_1V1.png',dpi=600)
nbins = 200
H, xedges, yedges = np.histogram2d(x,y,bins=nbins)
# H needs to be rotated and flipped
H = np.rot90(H)
H = np.flipud(H)
# 将 zeros mask
Hmasked = np.ma.masked_where(H==0,H)
# Plot 2D histogram using pcolor
fig2 = plt.figure()
plt.pcolormesh(xedges,yedges,Hmasked)
plt.xlabel('x')
plt.ylabel('y')
cbar = plt.colorbar()
cbar.ax.set_ylabel('Counts')
plt.savefig('2D_2V1.png',dpi=600)
plt.show()

这段代码的主要作用是生成 2D 直方图,帮助我们可视化数据集中的情况。

首先,使用 `numpy.random.randn()` 函数生成一个包含100,000个元素的随机数数组 x,并由 y = (1.5 * x) + np.random.randn(n) 计算出相应的 y 值,在 plt.plot(x,y,'.r') 中绘制二维散点图

接着,使用 `numpy.histogram2d()` 函数将数据划分到网格中,并且根据各网格内数据的计数绘制颜色不同的矩形。该函数返回三个值,分别是 H(计数)、xedges(每一列的边界)和 yedges(每一行的边界)。

再之后,在 H 非 0 的区域打上背景遮罩,并通过 `pcolormesh()` 函数把这些区域的计数对应于不同颜色的矩形来展示直方图。

最后,增加了一些标签、轴、颜色线条等细节,并使用 `plt.savefig()` 函数将图片保存为文件。

该代码可以用于描述任何包含两个变量的数据集,以适合于在图像上显示数据的形式呈现它们。

 

Example 2 :双 Y 轴(Python)

import csv
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
data=pd.read_csv('LOBO0010-2020112014010.tsv',sep='\t')
time=data['date [AST]']
sal=data['salinity']
tem=data['temperature [C]']print(sal)
DAT = []
for row in time:
DAT.append(datetime.strptime(row,"%Y-%m-%d %H:%M:%S"))
#create figure
fig, ax =plt.subplots(1)
# Plot y1 vs x in blue on the left vertical axis.
plt.xlabel("Date [AST]")
plt.ylabel("Temperature [C]", color="b")
plt.tick_params(axis="y", labelcolor="b")
plt.plot(DAT, tem, "b-", linewidth=1)
plt.title("Temperature and Salinity from LOBO (Halifax, Canada)")
fig.autofmt_xdate(rotation=50)
# Plot y2 vs x in red on the right vertical axis.
plt.twinx()
plt.ylabel("Salinity", color="r")
plt.tick_params(axis="y", labelcolor="r")
plt.plot(DAT, sal, "r-", linewidth=1)
#To save your graph
plt.savefig('saltandtemp_V1.png' ,bbox_inches='tight')
plt.show()
Example 3:拟合曲线(
Python)
import csv
import numpy as np
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import scipy.signal as signal
data=pd.read_csv('LOBO0010-20201122130720.tsv',sep='\t')
time=data['date [AST]']
temp=data['temperature [C]']
datestart = datetime.strptime(time[1],"%Y-%m-%d %H:%M:%S")
DATE,decday = [],[]
for row in time:
daterow = datetime.strptime(row,"%Y-%m-%d %H:%M:%S")
DATE.append(daterow)
decday.append((daterow-datestart).total_seconds()/(3600*24))
# First, design the Buterworth filter
N
= 2
# Filter orderWn = 0.01 # Cutoff frequency
B, A = signal.butter(N, Wn, output='ba')
# Second, apply the filter
tempf = signal.filtfilt(B,A, temp)
# Make plots
fig = plt.figure()
ax1 = fig.add_subplot(211)
plt.plot(decday,temp, 'b-')
plt.plot(decday,tempf, 'r-',linewidth=2)
plt.ylabel("Temperature (oC)")
plt.legend(['Original','Filtered'])
plt.title("Temperature from LOBO (Halifax, Canada)")
ax1.axes.get_xaxis().set_visible(False)
ax1 = fig.add_subplot(212)
plt.plot(decday,temp-tempf, 'b-')
plt.ylabel("Temperature (oC)")
plt.xlabel("Date")
plt.legend(['Residuals'])
plt.savefig('tem_signal_filtering_plot.png', bbox_inches='tight')
plt.show()

代码块主要是使用 Python 实现了一个数字信号处理的过程,是针对来自 LOBO0010-20201122130720.tsv 数据集的处理。

该代码块的任务是进行高斯滤波(Butterworth Filter)处理并拟合曲线,并通过可视化的方式呈现出原始数据和经过滤波处理后的信号及其差异。具体来说,使用 scipy.signal.butter() 函数设计滤波器、应用高斯滤波,然后使用 matplotlib.pyplot.plot() 函数画出图像。此外,还使用 matplotlib.pyplot.legend() 等函数为图形添加标签和文字说明。

最后,使用 matplotlib.pyplot.savefig() 函数将生成的图像保存到本地磁盘,并使用 matplotlib.pyplot.show() 函数展示可视化结果。

Example 3:拟合曲线(Python)

import csv
import numpy as np
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import scipy.signal as signal
data=pd.read_csv('LOBO0010-20201122130720.tsv',sep='\t')
time=data['date [AST]']
temp=data['temperature [C]']
datestart = datetime.strptime(time[1],"%Y-%m-%d %H:%M:%S")
DATE,decday = [],[]
for row in time:
daterow = datetime.strptime(row,"%Y-%m-%d %H:%M:%S")
DATE.append(daterow)
decday.append((daterow-datestart).total_seconds()/(3600*24))
# First, design the Buterworth filter
N
= 2
# Filter order
Wn = 0.01 # Cutoff frequency
B, A = signal.butter(N, Wn, output='ba')
# Second, apply the filtertempf = signal.filtfilt(B,A, temp)
# Make plots
fig = plt.figure()
ax1 = fig.add_subplot(211)
plt.plot(decday,temp, 'b-')
plt.plot(decday,tempf, 'r-',linewidth=2)
plt.ylabel("Temperature (oC)")
plt.legend(['Original','Filtered'])
plt.title("Temperature from LOBO (Halifax, Canada)")
ax1.axes.get_xaxis().set_visible(False)
ax1 = fig.add_subplot(212)
plt.plot(decday,temp-tempf, 'b-')
plt.ylabel("Temperature (oC)")
plt.xlabel("Date")
plt.legend(['Residuals'])
plt.savefig('tem_signal_filtering_plot.png', bbox_inches='tight')
plt.show()

这段代码主要是针对来自 LOBO0010-20201122130720.tsv 数据集的处理。它的主要任务是使用 Butterworth 滤波器进行数字信号处理,即对温度数据进行滤波处理,并通过可视化的方式呈现出原始数据和经过滤波处理后的信号及其差异。

首先,根据所给的 tsv 文件,我们使用 `pandas.read_csv()` 函数读取 csv 文件并将其加载到 data 存储库中。然后,使用 `datetime.strptime()` 函数来从 data 中获取时间戳。接着,创建一个时间序列,用于绘制 X 轴(每个时刻距离第一个时刻的秒数)。

然后,定义了 Buterworth 滤波器的阶数 N 和截止频率 Wn,并使用 `scipy.signal.butter()` 函数来设计(设计)滤波器。在设计完毕后,使用 `scipy.signal.filtfilt()` 函数应用该滤波器对原始数据 temp 进行滤波,得到滤波后的结果 tempf。

最后,使用 `plt.plot()` 绘制两个子图,分别表示原始温度数据、滤波后的温度数据和它们之间的差异(残差)。使用 `plt.savefig()` 函数将生成的图像保存到本地磁盘,并使用 `matplotlib.pyplot.show()` 函数展示可视化结果。

 

Example 4:三维地形(Python)

# This import registers the 3D projection
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cbook
from matplotlib import cm
from matplotlib.colors import LightSource
import matplotlib.pyplot as plt
import numpy as np
filename
=
cbook.get_sample_data('jacksboro_fault_dem.npz',
asfileobj=False)
with np.load(filename) as dem:
z = dem['elevation']
nrows, ncols = z.shape
x = np.linspace(dem['xmin'], dem['xmax'], ncols)
y = np.linspace(dem['ymin'], dem['ymax'], nrows)
x, y = np.meshgrid(x, y)
region = np.s_[5:50, 5:50]
x, y, z = x[region], y[region], z[region]
fig, ax = plt.subplots(subplot_kw=dict(projection='3d'))
ls = LightSource(270, 45)
rgb = ls.shade(z, cmap=cm.gist_earth, vert_exag=0.1, blend_mode='soft')
surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=rgb,linewidth=0, antialiased=False, shade=False)
plt.savefig('example4.png',dpi=600, bbox_inches='tight')
plt.show()

这段代码主要使用 Matplotlib 库中的模块 `Axes3D` 来创建和处理 3D 图形。其任务是将样本数据集 jacksboro_fault_dem.npz 中的地理高度(即该点距离海平面的高度)制成 3D 表面图。

首先,导入所需模块和库并读取数据。然后,选择特定区域进行绘制,即选区 region 为左上角为(5,5),右下角为(50,50) 的区域。接下来,使用 LightSource 函数实现 3D 图形的渲染,其中的参数 elevation 是数据集的高程信息,cmap 参数表示图像的颜色映射,vert_exag 参数表示图像的垂直高度系数。最后,使用 `plot_surface()` 函数画出 3D 表面图,并使用 `savefig()` 函数将生成的图像保存到本地磁盘,并使用 `show()` 函数展示可视化结果。

需要注意的是,在此过程中,也需要对 x、y 和 z 坐标进行网格化和重采样以制作 3D 表面图。

目录
相关文章
|
2月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
50 1
|
11天前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
51 19
|
6天前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
22天前
|
数据可视化 数据挖掘 Python
使用Python进行数据可视化:探索与实践
【10月更文挑战第21天】本文旨在通过Python编程,介绍如何利用数据可视化技术来揭示数据背后的信息和趋势。我们将从基础的图表创建开始,逐步深入到高级可视化技巧,包括交互式图表和动态展示。文章将引导读者理解不同图表类型适用的场景,并教授如何使用流行的库如Matplotlib和Seaborn来制作美观且具有洞察力的可视化作品。
45 7
|
21天前
|
数据可视化 定位技术 Python
使用Python进行数据可视化
【10月更文挑战第22天】在这篇文章中,我们将深入探讨如何使用Python进行数据可视化。我们将从基础的图表开始,然后逐步进入更复杂的可视化技术。我们将通过实例代码来展示如何实现这些可视化,以便读者能够更好地理解和应用这些技术。
21 5
|
23天前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
【10月更文挑战第20天】本文旨在为编程新手提供一个简洁明了的入门指南,通过Python语言实现数据可视化。我们会介绍如何安装必要的库、理解数据结构,并利用这些知识来创建基本图表。文章将用通俗易懂的语言和示例代码,帮助读者快速掌握数据可视化的基础技能。
30 4
|
1月前
|
数据可视化 Python
Python 高级绘图:探索数据可视化
在Python中,利用matplotlib、seaborn等库可实现数据的可视化。matplotlib功能丰富,支持基础图表绘制;seaborn则提供了更美观的默认样式。此外,matplotlib还支持3D图形及动态图表的生成,满足多样化的数据展示需求。 示例代码展示了如何使用这些库绘制正弦波、散点图、3D曲面图及动态更新的折线图。通过numpy生成数据,并借助matplotlib与seaborn的强大绘图功能,实现数据的直观呈现。
70 17
|
1月前
|
数据可视化 开发者 Python
使用Python进行数据可视化:从入门到精通
【10月更文挑战第7天】本文将引导您通过Python的可视化库,如Matplotlib和Seaborn,来探索和展示数据。我们将通过实际代码示例,学习如何创建各种图表,包括条形图、散点图和直方图等,并讨论如何优化这些图表以更好地传达信息。无论您是初学者还是有一定基础的开发者,这篇文章都能帮助您提高数据可视化技能。
|
1月前
|
数据可视化 Python
Python编程之数据可视化入门
【10月更文挑战第4天】在数字时代的洪流中,数据如同星辰般璀璨,而将它们绘制成图表,便是我们探索宇宙的方式。本文将带你启航,用Python这艘航船,驶向数据可视化的奥秘。我们将从安装必要的工具包开始,逐步深入到数据的呈现,最后通过代码示例点亮知识的灯塔,指引你在数据海洋中航行。让我们握紧舵盘,乘风破浪,揭开数据背后的故事吧!
|
1月前
|
存储 数据可视化 Python
Python编程中的数据可视化技术
在数据驱动的世界中,将复杂的数据集转换为易于理解的视觉表示形式至关重要。本文将深入探讨如何使用Python进行数据可视化,包括选择合适的库、处理数据和设计有效的图表。我们将一起学习如何让数据讲故事,并确保你的信息传达清晰且有影响力。