gpt4 book ai didi

python - 如何对齐重叠图中的直方图 bin 边缘

转载 作者:行者123 更新时间:2023-12-02 02:23:30 34 4
gpt4 key购买 nike

我已经设法让两个直方图重叠,但如果你仔细观察,条形开始倾斜并且没有完全重叠。

我已经调整了线宽和宽度,并没有改善。

我的目标是让所有的条形排列在彼此的顶部,黑边没有歪斜。

有什么办法解决这个问题

这是我的代码:

import matplotlib.pyplot as plt
import numpy

True_Distance = sort_by_Distance_below_4kpc_and_retrabmag_no_99s["true distance"].tolist()
Retr_Distance = sort_by_Distance_below_4kpc_and_retrabmag_no_99s["retrieved distance from observed parallax"].tolist()


plt.figure(figsize=(8,6))
plt.hist(True_Distance, normed=True, bins = 40, alpha=0.75, color = "mediumorchid", label="True Distance", edgecolor='black', linewidth=0.1, width=200)
plt.hist(Retr_Distance, normed=True, bins = 20, alpha=0.5, color = "lightskyblue", label="Retrieved Distance", edgecolor='black', linewidth=0.1, width=200)

# Add title and axis names
plt.title('Number distribution of stars with distance')
plt.xlabel('Distance (parsecs)')
plt.ylabel('Number of stars')
plt.legend()

输出如下:

Output Histogram

最佳答案

  • 有几种方法可以处理 bin 边缘对齐
    1. 如果 “距离” 类别(例如 “方法”)和值以整齐的格式单独提供,则 seaborn.histplot API 将正确对齐各种类别,当使用 hue 参数时。
      • 要使用此选项,您的列必须堆叠,因此测量方法在一列中,距离在另一列中,这可以通过以下代码行完成。
      • df = sort_by_Distance_below_4kpc_and_retrabmag_no_99s[['真实距离', '从观察到的视差检索距离']].stack().reset_index(level=1).rename(columns={'level_1': 'method', 0: '距离'})
    2. JohanC 在评论中所述,如果您单独绘制数据,如 OP 中所示,则必须指定 bin 边缘。
  • seabornmatplotlib 的高级 API。
  • 此示例的数据集是从 seaborn 示例数据集导入的,并在 NASA Exoplanet Explorations 处进行了说明。距离地球有光年。

示例数据和导入

  • plants 数据集与您的星距数据集非常吻合。此处,'method' 有多个值。
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["patch.force_edgecolor"] = True

# import some test data
df = sns.load_dataset('planets')

# display(df.head())
method number orbital_period mass distance year
0 Radial Velocity 1 269.300 7.10 77.40 2006
1 Radial Velocity 1 874.774 2.21 56.95 2008
2 Radial Velocity 1 763.000 2.60 19.84 2011
3 Radial Velocity 1 326.030 19.40 110.62 2007
4 Radial Velocity 1 516.220 10.50 119.47 2009

将所有“方法”绘制在一起

  • 如您所见,无论 bins 是如何指定的,边缘始终对齐
fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(10, 10))
data = df[df.distance < 801]
sns.histplot(data=data, x='distance', hue='method', ax=ax1, bins=np.arange(0, 801, 80))
sns.histplot(data=data, x='distance', hue='method', ax=ax2, bins=20)
sns.histplot(data=data, x='distance', hue='method', ax=ax3)

enter image description here

分别选择'method'并绘图

  • 只有 ax2 的边缘定义相同时,bin 边缘才会对齐。
  • 使用 sns.histplot 绘图,而不使用 hue,“大部分”等同于使用 plt.hist(...) 绘图
    • 有一些不同的默认值。例如bins:sns.hist使用autoplt.hist默认为10,如mwaskom所指出,seaborn 的创建者。
# create a dataframe for two values from the method column
radial = data[data.method == 'Radial Velocity']
transit = data[data.method == 'Transit']

fig, (ax1, ax2, ax3) = plt.subplots(nrows=3, figsize=(10, 10))

# number of bins and edges determined by the API
sns.histplot(data=transit, x='distance', color="lightskyblue", ax=ax1)
sns.histplot(data=radial, x='distance', color="mediumorchid", ax=ax1)

# bin edges defined the same for both plots
sns.histplot(data=transit, x='distance', bins=np.arange(0, 801, 40), color="lightskyblue", ax=ax2)
sns.histplot(data=radial, x='distance', bins=np.arange(0, 801, 40), color="mediumorchid", ax=ax2)

# a number of bins is specifice, edges determined by API based on the data
sns.histplot(data=transit, x='distance', bins=20, color="lightskyblue", ax=ax3)
sns.histplot(data=radial, x='distance', bins=20, color="mediumorchid", ax=ax3)

enter image description here

关于python - 如何对齐重叠图中的直方图 bin 边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66084052/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com