当前位置: 首页 > article >正文

python常见绘图及代码

 

一、引言

 

在数据驱动的时代,将数据转化为直观的图形对于理解数据、发现模式和传达信息至关重要。Python作为一种功能强大且广受欢迎的编程语言,拥有丰富的绘图库,能满足不同场景下的数据可视化需求。本文将深入探讨Python中常见的绘图程序,包括Matplotlib、Seaborn、Plotly和Bokeh,并提供详细的代码示例。

 

二、Matplotlib:基础绘图的基石

 

2.1 简单折线图

 

Matplotlib是Python中最常用的绘图库之一,其 pyplot 子库提供了类似MATLAB的绘图接口。绘制简单折线图的代码如下:

 

import matplotlib.pyplot as plt

import numpy as np

 

x = np.linspace(0, 10, 100)

y = np.sin(x)

 

plt.plot(x, y)

plt.xlabel('X轴')

plt.ylabel('Y轴')

plt.title('正弦函数')

plt.show()

 

 

在这段代码中, np.linspace(0, 10, 100) 生成了从0到10的100个等间距数据点, np.sin(x) 计算了这些点的正弦值。 plt.plot(x, y) 绘制折线图, plt.xlabel 、 plt.ylabel 和 plt.title 分别设置坐标轴标签和标题, plt.show() 显示图形。

 

2.2 散点图

 

绘制散点图只需将 plot 函数替换为 scatter 函数:

 

import matplotlib.pyplot as plt

import numpy as np

 

x = np.random.randn(100)

y = np.random.randn(100)

 

plt.scatter(x, y)

plt.xlabel('X值')

plt.ylabel('Y值')

plt.title('随机散点图')

plt.show()

 

 

这里 np.random.randn(100) 生成100个服从标准正态分布的随机数, plt.scatter(x, y) 将这些点绘制成散点图。

 

2.3 柱状图

 

绘制柱状图使用 bar 函数:

 

import matplotlib.pyplot as plt

import numpy as np

 

categories = ['A', 'B', 'C', 'D']

values = [25, 40, 15, 30]

 

plt.bar(categories, values)

plt.xlabel('类别')

plt.ylabel('数值')

plt.title('柱状图')

plt.show()

 

 

 categories 列表定义了柱状图的类别, values 列表定义了每个类别的数值, plt.bar(categories, values) 绘制柱状图。

 

三、Seaborn:统计绘图的利器

 

3.1 分布图

 

Seaborn建立在Matplotlib之上,提供了更高级的统计绘图功能。绘制单变量分布图可以使用 distplot 函数:

 

import seaborn as sns

import numpy as np

import matplotlib.pyplot as plt

 

data = np.random.randn(100)

sns.distplot(data)

plt.title('正态分布')

plt.show()

 

 

 np.random.randn(100) 生成100个标准正态分布随机数, sns.distplot(data) 绘制该数据的分布图,包括直方图和核密度估计曲线。

 

3.2 箱线图

 

绘制箱线图使用 boxplot 函数,可用于比较不同组数据的分布:

 

import seaborn as sns

import pandas as pd

import matplotlib.pyplot as plt

 

data = {

    '组A': np.random.randn(50),

    '组B': np.random.randn(50) + 1,

    '组C': np.random.randn(50) - 1

}

df = pd.DataFrame(data)

 

sns.boxplot(data = df)

plt.title('箱线图')

plt.show()

 

 

这里创建了一个包含三组数据的DataFrame, sns.boxplot(data = df) 绘制箱线图,展示每组数据的分布特征。

 

3.3 热力图

 

热力图常用于展示数据矩阵中数值的分布,使用 heatmap 函数:

 

import seaborn as sns

import numpy as np

import matplotlib.pyplot as plt

 

data = np.random.rand(5, 5)

sns.heatmap(data, annot = True, cmap='YlGnBu')

plt.title('热力图')

plt.show()

 

 

 np.random.rand(5, 5) 生成一个5x5的随机数矩阵, sns.heatmap(data, annot = True, cmap='YlGnBu') 绘制热力图, annot = True 表示在每个方格中显示数值, cmap='YlGnBu' 指定颜色映射。

 

四、Plotly:交互式绘图的先锋

 

4.1 交互式折线图

 

Plotly可以创建交互式的Web图形。绘制交互式折线图的代码如下:

 

import plotly.express as px

import numpy as np

 

x = np.linspace(0, 10, 100)

y = np.sin(x)

 

fig = px.line(x=x, y=y, title='交互式正弦函数')

fig.show()

 

 

 px.line(x=x, y=y, title='交互式正弦函数') 创建一个交互式折线图对象, fig.show() 在默认浏览器中显示图形,用户可以进行缩放、平移等交互操作。

 

4.2 交互式散点图

 

绘制交互式散点图:

 

import plotly.express as px

import numpy as np

 

x = np.random.randn(100)

y = np.random.randn(100)

 

fig = px.scatter(x=x, y=y, title='交互式散点图')

fig.show()

 

 

同样, px.scatter(x=x, y=y, title='交互式散点图') 创建交互式散点图,用户可通过交互探索数据。

 

4.3 3D 图形

 

Plotly绘制3D图形也很方便,例如绘制3D散点图:

 

import plotly.express as px

import numpy as np

 

x = np.random.randn(100)

y = np.random.randn(100)

z = np.random.randn(100)

 

fig = px.scatter_3d(x=x, y=y, z=z, title='3D 散点图')

fig.show()

 

 

 px.scatter_3d(x=x, y=y, z=z, title='3D 散点图') 创建一个3D散点图,能以三维视角展示数据关系。

 

五、Bokeh:Web 可视化的能手

 

5.1 简单折线图

 

Bokeh用于创建交互式Web可视化。绘制简单折线图:

 

from bokeh.plotting import figure, show

from bokeh.models import ColumnDataSource

import numpy as np

 

x = np.linspace(0, 10, 100)

y = np.sin(x)

source = ColumnDataSource(data=dict(x=x, y=y))

 

p = figure(title='正弦函数', x_axis_label='X', y_axis_label='Y')

p.line('x', 'y', source = source)

show(p)

 

 

这里使用 ColumnDataSource 来管理数据, figure 创建绘图对象, p.line('x', 'y', source = source) 绘制折线, show(p) 在浏览器中显示图形。

 

5.2 交互式柱状图

 

绘制交互式柱状图:

 

from bokeh.plotting import figure, show

from bokeh.models import ColumnDataSource

import numpy as np

 

categories = ['A', 'B', 'C', 'D']

values = [25, 40, 15, 30]

source = ColumnDataSource(data=dict(categories=categories, values=values))

 

p = figure(x_range=categories, title='柱状图', x_axis_label='类别', y_axis_label='数值')

p.vbar(x='categories', top='values', width=0.9, source = source)

show(p)

 

 

 p.vbar 绘制垂直柱状图,通过 ColumnDataSource 实现数据绑定,使图形具有交互性。

 

5.3 交互式地图

 

Bokeh还能绘制交互式地图,例如:

 

from bokeh.plotting import figure, show

from bokeh.models import GeoJSONDataSource, LinearColorMapper, ColorBar

from bokeh.palettes import Viridis6

import geopandas as gpd

 

# 读取地理数据

gdf = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

gdf = gdf[gdf['continent'] == 'Europe']

geosource = GeoJSONDataSource(geojson = gdf.to_json())

 

# 颜色映射

color_mapper = LinearColorMapper(palette = Viridis6, low = gdf['pop_est'].min(), high = gdf['pop_est'].max())

 

p = figure(title='欧洲人口分布', plot_width = 800, plot_height = 500, toolbar_location = None, tools = '')

p.patches('xs', 'ys', source = geosource, fill_color = {'field' :'pop_est', 'transform' : color_mapper}, line_color = 'black', line_width = 0.25)

 

color_bar = ColorBar(color_mapper=color_mapper, label_standoff=8, location=(0,0))

p.add_layout(color_bar, 'right')

 

show(p)

 

 

此代码使用地理数据绘制欧洲人口分布的交互式地图,通过颜色映射展示人口估计值。

 

六、总结

 

Python的绘图库为数据可视化提供了丰富的选择。Matplotlib适合基础绘图,Seaborn专注于统计绘图,Plotly和Bokeh则擅长创建交互式Web图形。根据具体需求选择合适的库,能更有效地将数据转化为有价值的可视化信息。通过不断实践和探索这些库的功能,我们可以创建出更具表现力和洞察力的数据可视化作品,助力数据分析、科学研究和信息传达等多个领域的工作。


http://www.kler.cn/a/470824.html

相关文章:

  • 服务器漏洞修复解决方案
  • springboot 集成 etcd
  • C++编程基础之override关键字
  • excel如何将小数转换为百分比
  • centOS7
  • R语言的网络编程
  • 技术文档撰写之道:构建清晰准确的知识传递桥梁
  • 【Java设计模式-1】单例模式,Java世界的“独苗”
  • C++中decltype遇到引用类型时的隐藏陷阱
  • 算法解析-经典150(矩阵、哈希表)
  • Redis - 6 ( 9000 字 Redis 入门级教程 )
  • 【快速入门 LVGL】-- 1、STM32 工程移植 LVGL
  • 深入了解SCPI协议:半导体测试与仪器自动化的核心
  • C语言——字符函数和内存函数
  • pikachu靶场--目录遍历和敏感信息泄露
  • 概率基本概念 --- 离散型随机变量实例
  • NLP 中文拼写检测纠正论文-08-Combining ResNet and Transformer
  • React Router 向路由组件传state参数浏览器回退历史页面显示效果问题
  • Vue.js组件开发-在setup函数中使用provide
  • 41.5 nginx拦截prometheus查询请求使用lua脚本做promql的检查替换
  • 少儿编程|基于SSM+vue的少儿编程管理系统的设计与实现(源码+数据库+文档)
  • 云计算中的可用性SLA
  • Flutter 如何编写 Dart CLI应用程序
  • react 封装一个类函数使用方法
  • 【微服务】4、服务保护
  • 在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法