看了一下我的可视化汇总内容,基础的图形都还有很多坑需要填补,今天就开始填坑,尽量快点把常见的基础图形在几个软件中的坑都先填好。就从分类开始,从一维数据开始,筛选了一下,目前只有四类数据,就从最少的直方图开始。

直方图的作用主要是用来看数据的分布情况,我们接触最多的就是正态分布,但是除了正态分布,常见的还有均匀分布、二项分布、泊松分布、指数分布。为了全面演示,我们这里就把几种分布都用一遍。
首先需要数据,我们用最常用的工具Excel来拟合生成几种分布数据,每类数据生成2048条。下面是Excel的公式,复制到单元格就可以了↓
NORM.INV(RAND(), 0, 1) #标准正态分布
NORM.INV(RAND(), 100, 15) #均值100,标准差10的正态分布
RAND()*100 #1-100之间的均匀分布
上面三种分布就可简单通过公式直接在单元格中拖拽生成,但是后面几种分布就需要借助Excel的数据分析工具实现,步骤如下↓
点击 Excel 的“数据”选项卡。 在“数据分析”组中,选择“数据分析”。 在弹出的对话框中,选择“随机数生成器”并点击“确定”。 在“随机数生成器”对话框中,选择“分布类型”。就可以生成数据了。演示一下↓

然后最后两种分布我们就使用Python模拟数据了,比较简单快捷,代码如下↓
np.random.poisson(lam=2, size=2048)
np.random.exponential(scale=1.0, size=2048)

【Excel作图】
数据有了,我们就可以开始今天的主题,画直方图了。先用第一列数据演示一下↓

然后就很简单了,根据之前说的数据图表的构成要素,我们进行设置和美化就行了。需要注意的是,直方图的核心调整参数就是下面的两个,通过对BIn的调整,可以展示不同的柱子宽度和数量。


左边设置的是50bin,右边是20bin,可根据需求调整。然后我们按部就班的把剩下的几个图像画完就行了。如果我们要画很多相同的图形,可以把当前的图形保存模版,后面直接使用就行了,就不需要设置各种参数了↓

【PowerBI实现】
在PowerBI中也比较简单,但是默认的视觉对象里面没有直方图的选项,需要我们去市场中搜索Histogram。

试了几个视觉对象,都不是很友好,可调节的参数很有限,甚二项分布和泊松分布的结果出问题了。
【Python中实现】
在Python里面,画直方图就比较简单了,直接使用matplotlib里面的hist就可以了,把对应的参数简单加上就完成了↓
import os
os.chdir(r"C:\Users\wangf\Desktop")
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import pandas as pd
df = pd.read_excel("分布数据.xlsx")
# 绘制直方图
plt.hist(df['标准正态分布'], bins=20, color='#33557d', edgecolor='black')
plt.xlabel('Value')
plt.ylabel('频率')
plt.title('直方图(标准正态分布)')
plt.show()

如果需要一次绘制很多图形,可以使用如下代码把图形放在一张画布上展示↓
# 创建一个新的画布
fig, axs = plt.subplots(2, 3, figsize=(15, 10))
# 绘制每一列的直方图
for i, col in enumerate(df.columns):
row = i // 3
col = i % 3
axs[row, col].hist(df[df.columns[i]], bins=20, color='#235c7d')
axs[row, col].set_title(df.columns[i])
plt.tight_layout()
plt.show()

【R语言中实现】
在R语言里面,常规的图像就建议使用ggplot来实现,下面是绘制直方图的代码↓
library(readxl)
file_path <- "C:/Users/wangf/Desktop/分布数据.xlsx"
data <- read_excel(file_path)
library(ggplot2)
ggplot(data, aes(x = data_df[,1])) +
geom_histogram(fill = "skyblue",
color = "black",
bins = 30) +
labs(title = "标准正太分布直方图",
x = "Values",
y = "频率") +
theme(plot.title = element_text(size = 20))

同样,可以把六列数据绘制在一个画布中,代码如下↓
# 将数据转换为长格式
data_long <- gather(data, key = "variable", value = "value")
ggplot(data_long, aes(x = value, fill = variable)) +
geom_histogram(color = "black", bins = 20) +
facet_wrap(~ variable, scales = "free") +
labs(x = "Values", y = "频率") +
theme(plot.title = element_text(size = 14)) +
ggtitle("六种分布数据的直方图效果") +
theme(plot.title = element_text(size = 20))

End