Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用数据中断绘制虚线(类似于等高线图)_Python_Matplotlib_Plot_Line_Contour - Fatal编程技术网

Python 用数据中断绘制虚线(类似于等高线图)

Python 用数据中断绘制虚线(类似于等高线图),python,matplotlib,plot,line,contour,Python,Matplotlib,Plot,Line,Contour,我遇到了一个(希望是)简单的问题。 我的目标是绘制一条被数据(而不仅仅是文本)打断的虚线 因为我只知道通过linestyle='虚线'创建虚线,所以非常感谢您提供的任何帮助,将数据放在虚线之间 类似的东西,关于标签,已经存在于Matplotlib中——正如我在中所看到的 更新: 这很有帮助,但不是我在评论中提到的100%。 目前,我是这样做的: line_string2 = '-10 ' + u"\u00b0" +"C" l, = ax1.plot(T_m10_X_Values,T_m10_

我遇到了一个(希望是)简单的问题。 我的目标是绘制一条被数据(而不仅仅是文本)打断的虚线

因为我只知道通过linestyle='虚线'创建虚线,所以非常感谢您提供的任何帮助,将数据放在虚线之间

类似的东西,关于标签,已经存在于Matplotlib中——正如我在中所看到的

更新:

这很有帮助,但不是我在评论中提到的100%。 目前,我是这样做的:

line_string2 = '-10 ' + u"\u00b0" +"C"
l, = ax1.plot(T_m10_X_Values,T_m10_Y_Values)
pos = [(T_m10_X_Values[-2]+T_m10_X_Values[-1])/2., (T_m10_Y_Values[-2]+T_m10_Y_Values[-1])/2.]
# transform data points to screen space
xscreen = ax1.transData.transform(zip(T_m10_Y_Values[-2::],T_m10_Y_Values[-2::]))
rot = np.rad2deg(np.arctan2(*np.abs(np.gradient(xscreen)[0][0][::-1])))
ltex = plt.text(pos[0], pos[1], line_string2, size=9, rotation=rot, color='b',ha="center", va="bottom",bbox = dict(ec='1',fc='1', alpha=0.5))
在这里,您可以看到结果的快照。零下20°C没有BBox


使用
注释快速而肮脏的回答

import matplotlib.pyplot as plt
import numpy as np

x = list(reversed([1.81,1.715,1.78,1.613,1.629,1.714,1.62,1.738,1.495,1.669,1.57,1.877,1.385]))
y = [0.924,0.915,0.914,0.91,0.909,0.905,0.905,0.893,0.886,0.881,0.873,0.873,0.844]

def plot_with_text(x, y, text, text_count=None):
    text_count = (2 * (len(x) / len(text))) if text_count is None else text_count
    fig, ax = plt.subplots(1,1)
    l, = ax.plot(x,y)
    text_size = len(text) * 10
    idx_step = len(x) / text_count
    for idx_num in range(text_count):
        idx = int(idx_num * idx_step)
        text_pos = [x[idx], y[idx]]
        xscreen = ax.transData.transform(zip(x[max(0, idx-1):min(len(x), idx+2)], y[max(0, idx-1):min(len(y), idx+2)]))
        a = np.abs(np.gradient(xscreen)[0][0])
        rot = np.rad2deg(np.arctan2(*a)) - 90
        ax.annotate(text, xy=text_pos, color="r", bbox=dict(ec="1", fc="1", alpha=0.9), rotation=rot, ha="center", va="center")

plot_with_text(x, y, "test")
收益率:


您可以使用偏移量来获得更令人满意的结果。

Hi-我已经编辑了问题的图片。您能否在a中编辑当前用于绘制线条的代码以及要在虚线之间输入的数据?然后我们可能会提供帮助-我不认为有一个简单的“一刀切”解决方案,比如“使用样式=带标签的破折号”或任何东西。事实上-你可能想查看这个问题和答案。这也许足够了。如果不是这样的话——而且你无法调整它们以获得你想要的重复——在你的问题中添加对这些的引用(以表明你意识到),并指定重复标签对你很重要。大家好,Richard提到的链接是靶心,至少看起来是这样。结果正是我所需要的。但我有一个网格后面通过imshow可视化,而不是白色背景。可以看到,带文本的虚线是bbox的结果,它覆盖了该行。与佐尔德合作也没有奏效。但有了这个解决方案,到目前为止我还可以活下去。如果没有其他方法,我想你希望20出现在图表中所有其他东西的前面。您需要调查
zorder
属性。简单地说,
zorder
越高,绘制的东西就越“在上面”。您对
plt.text
的调用是,您可以看到您可以设置
zorder
。因此,请尝试将该调用更改为
plt.text(pos[0],pos[1],line_string2,size=9,rotation=rot,color='b',ha=“center”,va=“bottom”,zorder=100)
,看看这是否是您想要的。您应该注意,您可以在许多matplotlib调用上设置
zorder
,控制哪些元素在其他元素前面绘制。