python - 将 drawstyle "steps-mid" 与 x-log-scale 一起使用会导致步进点不居中
问题描述
Matplotlib 为drawstyle提供了各种选项。steps-mid
执行以下操作:
阶梯变体将点与阶梯状线连接,即水平线与垂直阶梯。[...]
'steps-mid':步长在两点之间。
当 x 尺度是线性的时,这很好用,但是当使用对数尺度时,它似乎仍然通过在数据空间而不是对数空间中求平均来计算步长点。这导致数据点不在步骤之间居中。
import matplotlib.pyplot as plt
import numpy as np
x = np.logspace(0, 10, num=10)
y = np.arange(x.size) % 2
fig, ax = plt.subplots()
ax.set_xscale('log')
ax.plot(x, y, drawstyle='steps-mid', marker='s')
有没有一种方法可以将阶梯状绘图与 x-log-scale 一起使用,以使阶梯居中于对数空间中的数据点之间?
解决方案
除了自己在日志空间中正确构建步骤之外,我不知道其他方法:
import matplotlib.pyplot as plt
import numpy as np
x = np.logspace(0, 10, num=10)
y = np.arange(x.size) % 2
def log_steps_mid(x, y, **kwargs):
x_log = np.log10(x)
x_log_mid = x_log[:-1] + np.diff(x_log)/2
x_mid = 10 ** x_log_mid
x_mid = np.hstack([x[0],
np.repeat(x_mid, 2),
x[-1]])
y_mid = np.repeat(y, 2)
ax.plot(x_mid, y_mid, **kwargs)
fig, ax = plt.subplots()
ax.set_xscale('log')
ax.plot(x, y, ls='', marker='s', color='b')
log_steps_mid(x, y, color='b')
推荐阅读
- c# - 使用 `SyntaxGenerator` 创建扩展方法
- java - 自定义适配器不会更改列表视图中的文本
- c++ - 在 C++ 中,为什么 operator>> 不会从输入缓冲区中删除 '\n',为什么 getline 会删除它?
- sql - 如何编写一个 PL/SQL 代码,在插入之前检查 table_name.column 名称中是否存在值?
- python - (非常简单的问题)if 语句中的变量有多个值?
- build - 由于在 yocto dunfell 环境中找不到 sys/types.h,内核构建失败
- amazon-web-services - 为什么对 ECS 容器的所有请求都只发送到 AWS 中的 1 个(共 2 个)EC2 实例?
- python - 化简分数
- powershell - LocalUser 的 ChangePasswordAtLogon
- azure - 无法使用 AKS 访问外部负载均衡器