Python数据可视化:Matplotlib 直方图、箱线图、条形图、热图、折线图、散点图。。。

本文介绍了如何使用Python进行数据可视化,包括直方图、箱线图、小提琴图等多种图表的绘制方法,并提供了实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

      使用Python进行数据分析,数据的可视化是数据分析结果最好的展示方式,这里从Analytic Vidhya中找到的相关数据,进行一系列图形的展示,从中得到更多的经验。
      强烈推荐:Analytic Vidhya

Python数据可视化库

  • Matplotlib:其能够支持所有的2D作图和部分3D作图。能通过交互环境做出印刷质量的图像。
  • Seaborn:基于Matplotlib,seaborn提供许多功能,比如:内置主题、颜色调色板、函数和提供可视化单变量、双变量、线性回归的工具。其能帮助我们构建复杂的可视化。

数据集

EMPIDGenderAgeSalesBMIIncome
E001M34123Normal350
E002F40114Overweight450
E003F37135Obesity169
E004M30139Underweight189
E005F44117Underweight183
E006M36121Normal80
E007M32133Obesity166
E008F26140Normal120
E009M32133Normal75
E010M36133Underweight40

作图

# -*- coding:UTF-8 -*-

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np

# 0、导入数据集
df = pd.read_excel('first.xlsx', 'Sheet1')
# 1、直方图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.hist(df['Age'], bins=7)
plt.title('Age distribution')
plt.xlabel('Age')
plt.ylabel('Employee')
plt.show()

这里写图片描述

# 2、箱线图  
fig = plt.figure()
ax = fig.add_subplot(111)
ax.boxplot(df['Age'])
plt.show()

这里写图片描述

# 3、小提琴图
sns.violinplot(df['Age'], df['Gender'])
sns.despine()
plt.show()

这里写图片描述

# 4、条形图
var = df.groupby('Gender').Sales.sum()
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_xlabel('Gender')
ax1.set_ylabel('Sum of Sales')
ax1.set_title('Gender wise Sum of Sales')
var.plot(kind='bar')
plt.show()

这里写图片描述

# 5、折线图
var = df.groupby('BMI').Sales.sum()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlabel('BMI')
ax.set_ylabel('Sum of Sales')
ax.set_title('BMI wise Sum of Sales')
var.plot(kind='line')
plt.show()

这里写图片描述

# 6、堆积柱形图
var = df.groupby(['BMI', 'Gender']).Sales.sum()
var.unstack().plot(kind='bar', stacked=True, color=['red', 'blue'])
plt.show()

这里写图片描述

# 7、散点图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(df['Age'], df['Sales'])
plt.show()

这里写图片描述

# 8、气泡图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(df['Age'], df['Sales'], s=df['Income'])  # 第三个变量表明根据收入气泡的大小
plt.show()

这里写图片描述

# 9、饼图
var = df.groupby(['Gender']).sum().stack()
temp = var.unstack()
type(temp)
x_list = temp['Sales']
label_list = temp.index
plt.axis('equal')
plt.pie(x_list, labels=label_list, autopct='%1.1f%%')
plt.title('expense')
plt.show()

这里写图片描述

# 10、热图
data = np.random.rand(4, 2)
rows = list('1234')
columns = list('MF')
fig, ax = plt.subplots()
ax.pcolor(data, cmap=plt.cm.Reds, edgecolor='k')
ax.set_xticks(np.arange(0, 2)+0.5)
ax.set_yticks(np.arange(0, 4)+0.5)
ax.xaxis.tick_bottom()
ax.yaxis.tick_left()
ax.set_xticklabels(columns, minor=False, fontsize=20)
ax.set_yticklabels(rows, minor=False, fontsize=20)
plt.show()

这里写图片描述

<think>好的,用户想用Python绘制二维复数函数的像,使用matplotlib或numpy。首先,我需要回忆一下复数函数绘的方法。复数函数通常输出也是复数,包含实部和虚部,或者模和相位角。常见的可视化方式可能有以下几种: 1. 分别绘制实部和虚部的二维像,使用两个子。 2. 绘制模长和相位角的,可能需要颜色映射。 3. 使用流线或矢量场表示复数场的分布。 4. 将复数映射到HSV颜色空间,相位对应色调,模对应亮度或饱和度。 用户提供的引用中,引用[3]提到了使用imshow和颜色映射来处理逃逸时间,这可能类似于Mandelbrot集的绘制方法。例如,将复数函数的模或相位转换为颜色值显示。另外,引用[1]中的pcolor和引用[2]中的3D散点图可能不太直接相关,但颜色映射的方法可以参考。 首先,复数函数的输入通常是二维平面上的点,输出是复数。例如,函数f(z) = z^2,其中z = x + yi。要将其可视化,需要将每个点(x,y)映射到一个颜色或两个分量(实部、虚部)。 可能的步骤是生成网格点,计算每个点的函数值,然后选择如何展示这些值。比如,使用numpy的meshgrid生成x和y的网格,计算z = x + 1j*y,然后计算f(z),得到结果的实部、虚部、模或相位。 然后,用matplotlib的imshow或pcolor来显示这些矩阵。例如,引用[1]中的pcolor示例,或者引用[3]中的imshow方法。对于相位和模的情况,可能需要将相位映射到色相(Hue),模映射到亮度(Value),形成HSV像,再转换为RGB显示。 另外,引用[4]中的expand_dims可能用于调整数组形状,但在这个问题中可能不需要。引用[5]提到mgrid生成二维数组,这可能用于创建网格点。 接下来,我需要考虑如何编写示例代码。例如,绘制f(z)=z^2的模和相位: 1. 生成x和y的网格。 2. 计算复数数组z = x + 1j*y。 3. 计算f(z) = z^2,得到结果的模和相位。 4. 使用imshow或pcolor绘制模的,相位可以用颜色表示,或者分开绘制。 另一个例子是将相位和模组合成HSV像,如将相位作为H,模作为V,固定S为1,然后用matplotlib的hsv_to_rgb转换后显示。 此外,用户可能需要同时显示实部和虚部,或者使用分通道的方式,但这可能比较复杂。 需要注意,当处理复数时,numpy可以直接进行运算,比如np.abs()求模,np.angle()求相位角。颜色映射方面,可以使用hsv的colormap,或者自定义映射。 现在,我需要验证这些思路是否正确。例如,引用[3]中的Mandelbrot集绘制使用逃逸时间作为颜色值,类似的方法可以应用在这里,将模或相位作为颜色数据。 可能的代码结构: 生成网格: x = np.linspace(-2, 2, 500) y = np.linspace(-2, 2, 500) X, Y = np.meshgrid(x, y) Z = X + 1j*Y 计算函数: F = Z**2 提取模和相位: magnitude = np.abs(F) phase = np.angle(F) 绘制模: plt.imshow(magnitude, extent=(-2,2,-2,2), cmap='viridis') plt.colorbar() 绘制相位: plt.imshow(phase, extent=(-2,2,-2,2), cmap='hsv') plt.colorbar() 或者将两者结合为HSV像: h = (phase + np.pi) / (2 * np.pi) # 归一化到0-1 s = np.ones_like(h) v = magnitude / np.max(magnitude) hsv = np.stack([h, s, v], axis=-1) rgb = matplotlib.colors.hsv_to_rgb(hsv) plt.imshow(rgb, extent=(-2,2,-2,2)) 这样用户就能看到相位对应的颜色和模对应的亮度。 同时,用户可能需要不同的函数示例,比如sin(z)或其他,但代码结构类似。 另外,需要注意坐标轴的设置,因为meshgrid生成的X和Y可能需要转置或调整方向,确保像显示正确。 总结步骤: 1. 创建x和y的网格。 2. 生成复数网格Z。 3. 计算函数F(Z)。 4. 提取模和相位。 5. 选择合适的可视化方法(如imshow、pcolor,或HSV转换)。 6. 添加颜色条、标题等。 在回答时,需要提供具体的代码示例,并解释每个步骤的作用,同时参考引用中的相关方法,比如imshow的使用[^3],颜色映射的处理等。</think>要使用Python绘制二维复数函数像,可以通过将复数函数的模(Magnitude)和相位(Phase)映射到颜色空间来实现。以下是两种常见方法及代码示例: --- ### **方法1:分别绘制模和相位像** ```python import numpy as np import matplotlib.pyplot as plt # 生成二维复数网格 x = np.linspace(-2, 2, 500) y = np.linspace(-2, 2, 500) X, Y = np.meshgrid(x, y) Z = X + 1j * Y # 定义复数函数,例如 f(z) = z^2 F = Z ** 2 # 计算模和相位 magnitude = np.abs(F) phase = np.angle(F) # 范围 [-π, π] # 绘制模的像 plt.figure(figsize=(12, 5)) plt.subplot(1, 2, 1) plt.imshow(magnitude, extent=(-2, 2, -2, 2), cmap='viridis', origin='lower') plt.colorbar(label='Magnitude') plt.title('Magnitude of $f(z)=z^2$') # 绘制相位的像 plt.subplot(1, 2, 2) plt.imshow(phase, extent=(-2, 2, -2, 2), cmap='hsv', origin='lower') plt.colorbar(label='Phase (radians)') plt.title('Phase of $f(z)=z^2$') plt.tight_layout() plt.show() ``` --- ### **方法2:HSV颜色空间合成(相位为色相,模为亮度)** ```python import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import hsv_to_rgb # 生成二维复数网格 x = np.linspace(-2, 2, 500) y = np.linspace(-2, 2, 500) X, Y = np.meshgrid(x, y) Z = X + 1j * Y # 定义复数函数,例如 f(z) = sin(z) F = np.sin(Z) # 计算模和相位 magnitude = np.abs(F) phase = np.angle(F) # 将相位映射到HSV色相(Hue),模映射到亮度(Value) h = (phase + np.pi) / (2 * np.pi) # 归一化到[0,1] s = np.ones_like(h) # 固定饱和度 v = magnitude / np.max(magnitude) # 归一化亮度 # 合并HSV并转换为RGB hsv_image = np.stack([h, s, v], axis=-1) rgb_image = hsv_to_rgb(hsv_image) # 绘制像 plt.figure(figsize=(8, 6)) plt.imshow(rgb_image, extent=(-2, 2, -2, 2), origin='lower') plt.title('$f(z)=\\sin(z)$: Phase (Color) and Magnitude (Brightness)') plt.xlabel('Real') plt.ylabel('Imaginary') plt.show() ``` --- ### **关键步骤说明** 1. **生成网格**:通过`np.meshgrid`创建实部和虚部的二维网格,并组合成复数数组$Z$[^5]。 2. **计算函数值**:对每个复数$Z$应用目标函数(如$z^2$或$\sin(z)$)。 3. **提取模和相位**:使用`np.abs`和`np.angle`分别获取模和相位。 4. **颜色映射**: - **方法1**:用`imshow`分别展示模()和相位(周期性色相)。 - **方法2**:将相位映射到HSV色相,模映射到亮度,通过`hsv_to_rgb`生成复合像[^3]。 ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值