关于一些python的作图方法总结
画图
柱状图
import matplotlib.pyplot as plt
# 示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D', 'Category E']
values = [15, 30, 10, 25, 20]
# 绘制柱状图
plt.bar(categories, values, color='blue')
# 添加标签和标题
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart Example')
# 显示图形
plt.show()
散点图
单变量散点图
import matplotlib.pyplot as plt
# 生成示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制散点图
plt.scatter(x, y, s=50, c='blue', marker='o', label='Data Points')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot Example')
plt.legend()
plt.show()
多变量间散点图
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(0)
num_samples = 100
variable_1 = np.random.rand(num_samples)
variable_2 = np.random.rand(num_samples)
variable_3 = np.random.rand(num_samples)
# 创建DataFrame
data = pd.DataFrame({'Variable 1': variable_1,
'Variable 2': variable_2,
'Variable 3': variable_3})
# 绘制散点矩阵
sns.pairplot(data)
plt.show()
三维散点图
from mpl_toolkits.mplot3d import Axes3D
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z)
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
plt.title('3D Scatter Plot')
plt.show()
六边形散点图
用来显示数据的分布密度,特别适用于大量数据点的可视化
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.hexbin(x, y, gridsize=20, cmap='viridis')
plt.colorbar()
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Hexbin Plot')
plt.show()
饼图
labels = ['A', 'B', 'C', 'D']
sizes = [25, 30, 20, 15]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Pie Chart')
plt.show()
直方图
data = np.random.randn(1000)
plt.hist(data, bins=20)
plt.xlabel('Values')
plt.ylabel('Frequency')
plt.title('Histogram')
plt.show()
相关性热图
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 生成示例数据
np.random.seed(0)
num_samples = 100
variable_1 = np.random.rand(num_samples)
variable_2 = np.random.rand(num_samples)
variable_3 = np.random.rand(num_samples)
variable_4 = np.random.rand(num_samples)
variable_5 = np.random.rand(num_samples)
# 创建DataFrame
data = pd.DataFrame({'Variable 1': variable_1,
'Variable 2': variable_2,
'Variable 3': variable_3,
'Variable 4': variable_4,
'Variable 5': variable_5})
# 计算相关性矩阵
correlation_matrix = data.corr() # method='spearman','kendall','pearson'
# 绘制相关性热图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.title('Correlation Heatmap')
plt.show()
annot
:是否在热图中显示数值。vmin
和vmax
:设置颜色映射的最小和最大值。center
:如果设置为某个值,将会在颜色映射中心标记出一个点,用于非对称颜色映射。linewidths
和linecolor
:设置热图单元格之间的边界线宽和颜色。square
:是否将热图的单元格设置为正方形。
正态性检验
正态性检验用于检查数据是否符合正态分布(高斯分布)。正态分布在许多统计方法中是一个重要的假设。
Shapiro-Wilk检验
用于小样本数据的正态性检验
Kolmogorov-Smirnov检验
用于大样本数据的正态性检验。
QQ图
用于可视化数据分布与正态分布之间的差异。
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from scipy.stats import norm, probplot
# 生成正态分布样本
np.random.seed(0)
sample_size = 1000
mean = 0
std_dev = 1
data = np.random.normal(mean, std_dev, sample_size)
# 绘制直方图
plt.figure(figsize=(12, 6))
# 创建一个 1 行 3 列的子图,当前子图位于第一个位置。
plt.subplot(1, 3, 1)
# 设置 bins=30 表示将数据分成 30 个区间,设置 kde=True 表示同时绘制核密度估计曲线。
sns.histplot(data, bins=30, kde=True)
# 绘制QQ图
plt.subplot(1, 3, 2)
probplot(data, plot=plt)
# 绘制核密度估计图
plt.subplot(1, 3, 3)
sns.kdeplot(data)
# 调整子图布局
plt.tight_layout()
plt.show()
等高线图
用于显示一个二维函数在平面上的轮廓线。等高线图可以观察函数在不同位置的值变化。
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2))
plt.contour(X, Y, Z, levels=20, cmap='viridis')
plt.colorbar()
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Contour Plot')
plt.show()
堆叠面积图
用于显示不同组的数据在不同时间或位置的堆叠关系。
堆叠面积图常用于比较多组数据的总体趋势,并展示每组数据的相对贡献。
x = np.arange(1, 6)
y1 = [1, 4, 6, 8, 9]
y2 = [2, 2, 7, 10, 12]
plt.stackplot(x, y1, y2, labels=['A', 'B'])
plt.legend(loc='upper left')
plt.title('Area Plot')
plt.show()
堆叠柱状图
用于同时比较两组数据在不同类别下的分布情况。堆叠柱状图常用于显示多组数据在多个类别中的分布关系。
#%%
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values1 = [15, 20, 10, 25]
values2 = [10, 18, 15, 20]
plt.bar(categories, values1, label='Values 1')
plt.bar(categories, values2, bottom=values1, label='Values 2')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Stacked Bar Plot')
plt.legend()
plt.show()