python - 如何用线投影绘图的交点?
问题描述
我正在寻找一种方法来使用 x 轴上的垂直不连续线(样式“--”)投影图形的交点,然后在该轴上写入 x 坐标。
这是我寻找交叉点的尝试。由于某种原因,该点并不完全在交叉点上。真奇怪。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
n = 256
k = np.arange(0, 100)
g = 1 - np.exp(-0.5 * k * (k - 1) / n)
plt.plot(g, '-')
plt.hlines(0.5, 0, 100, 'r')
idx = np.argwhere(np.diff(np.sign(g - 0.5)))
plt.plot(k[idx], g[idx], 'o')
plt.show()
解决方案
正如 tevemadar 的评论中所提到的,您需要通过求解 g = 0.5 的 k 来找到交点,即您绘制 hline 的位置。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
n = 256
k = np.arange(0, 100)
f = 0.5
g = 1 - np.exp(-0.5 * k * (k - 1) / n)
plt.plot(g, '-')
hline_pos = 0.5
plt.hlines(hline_pos, 0, 100, 'r')
# inverse
# np.exp(-0.5 * k * (k - 1) / n) = 1 - g
# -0.5 * k * (k - 1) / n = np.log(1 - g)
# k^2 - k = np.log(1 - g) * (-n/0.5)
solve_for = hline_pos
constant = np.log(1 - solve_for) * (-n/0.5)
ks = np.roots([1, -1, -constant])
ks = np.sort(ks) # sort to get the positive root based on the domain boundaries
plt.scatter(ks[1], hline_pos)
plt.vlines(ks[1], 0, hline_pos, linestyles='--')
plt.show()
推荐阅读
- javascript - 使用 VUE - 即使只有部分不同,HTML 是否也会更新?
- .net - 如何以编程方式确定 .NET 项目的类型
- regex - 如果行以字母开头,则在python中删除换行符
- xcode - 在 Xcode 11 中,在助手编辑器中打开/更改文件的键盘快捷键是什么?
- numpy - TypeError:输入类型不支持 ufunc 'isfinite',并且输入无法安全强制
- php - 将 json 从 curl 存储到 mysql 表
- javascript - 如何删除 React 中的项目?
- cmake - cmake bootstrapping 找不到 ncurses
- reactjs - Apollo 客户端调用每个突变和查询两次(React)
- angular - ngx-mat-select-search 覆盖了我的滚动条