python - Python - 如何在多个直方图上具有相同的最大值
问题描述
我有两个分布不同的分布,比如说
a=N.random.normal(0,0.5,500)
b=N.random.normal(1,3.,500)
我想制作它们的直方图,其中最大值处于同一水平。
如果我使用 density=True 参数制作标准化直方图,它将使两个直方图的面积都为 1,它不会改变最大值不同的事实。
P.hist(a, histtype='step', lw=2, cumulative=True)
P.hist(b, histtype='step', color='r', lw=2, density=True)
我想要的是制作一个直方图,用最大值“标准化”它。我的意思是当蓝色和红色直方图的最大值相同时,可以很容易地比较它们。非常感谢您的帮助。
解决方案
我不确定我是否真的会这样做,但是如果您愿意,我认为最好的方法是添加两个轴(也可以让您看到它们的实际高度)。例如,请参见此处:https ://matplotlib.org/gallery/api/two_scales.html
import numpy as np
from matplotlib import pyplot as plt
fig, ax1 = plt.subplots()
ax1.hist(a, histtype='step', color='b', lw=2, density=True)
ax1.tick_params(axis='y', labelcolor='b')
ax2 = ax1.twinx()
ax2.hist(b, histtype='step', color='r', lw=2, density=True)
ax2.tick_params(axis='y', labelcolor='r')
这给出了以下输出(我认为,这看起来比您获得的更糟糕;我还在第一个图中将累积 = True 更改为 density=True 以与您提供的图一致):
此外,严格来说,这并不能确保最大值确实相同。如果你想这样做,你可以通过例如
import numpy as np
from matplotlib import pyplot as plt
fig, ax1 = plt.subplots()
n1, _, _ = ax1.hist(a, histtype='step', color='b', lw=2, density=True)
ax1.tick_params(axis='y', labelcolor='b')
ax2 = ax1.twinx()
n2, _, _ = ax2.hist(b, histtype='step', color='r', lw=2, density=True)
ax2.tick_params(axis='y', labelcolor='r')
ax1.set_ylim([0, n1.max()*1.1])
ax2.set_ylim([0, n2.max()*1.1])
推荐阅读
- spring-boot - 在 Spring Webflux Security 中使用多个 JWT 解码器
- javascript - 基于构造函数参数子集的类类型参数
- ios - 无法使用 in_app_purchase 与 Flutter 中的辅助应用程序通信:^0.5.2 付款
- python - 列出列中数据相似的行(Python)
- c# - 使用 JWT 从 WCF 自托管服务器进行身份验证
- email - 使用 Postfix 时日志中出现 SSL_accept 错误
- python - 如何解决 AWS RDS 问题:psycopg2.OperationalError: FATAL: password authentication failed for user "root"
- sql-server - 如何使用 SQL 查询动态生成 CREATE 语句?
- keycloak - 如何调试用户存储 SPI 插件?
- c++ - 多个重载函数“DISPLAY”实例与参数列表匹配?