【问题标题】:Python: define color curve sectionPython:定义颜色曲线部分
【发布时间】:2017-11-13 09:15:57
【问题描述】:

我正在尝试复制下图:

颜色渐变从蓝色变为红色,表示材料的状态。我目前可以绘制每条曲线。每条线由两个点定义,然后使用 pyplot(matplotlib 库)简单地绘制。我对如何计算关联值也有一个清晰的想法。
但是,可以注意到,例如第一张图中的点 9 或 22,重叠区域的值是不同的。我目前不知道如何有效地做到这一点。
我唯一的想法来自this solution。基本上,我必须将每个曲线部分变成一个多边形。但它看起来很重,在这种情况下可能不是最好的解决方案。

我主要是寻求可以帮助我实现这一目标的线索,或者只是寻求一种更聪明的方式来看待问题!

生成此图的代码:

import shelve
import matplotlib.pyplot as plt
import os

path = "C:/Users/***/Desktop/Python/PyHugo/"
d = shelve.open(os.path.join(path, 'output.db'))
pointMat = d ['curve']
d.close()

fig=plt.figure()
ax=fig.add_subplot(111)

for matID in pointMat.keys():   
    for couple in range(len(pointMat[matID])-1):
        plt.plot([pointMat[matID][couple][0][0],pointMat[matID][couple][1][0]],[pointMat[matID][couple][0][1],pointMat[matID][couple][1][1]])

plt.show()

点存储在 pointMat 字典中。每个区域都有一组点。区域是一种特定的材料。它在图一中用黑线(约 540)表示。因此,在当前示例中,有 2 种材料。

第一组点由下式给出:

print matPoint[0][0]

结果:[[20, 20], [0, 40]]。我们询问了第一个材料中的前几点。

编辑1:添加代码,删除题外话

编辑 2: 我没有绘制曲线,而是将值映射到网格上(现象的离散化)。这个问题有太多的变化,这似乎是一个更好的主意。感谢您花时间帮助我!

【问题讨论】:

    标签: python matplotlib plot curve


    【解决方案1】:

    您需要使用 alpha 参数使线条半透明:

    plt.plot([pointMat[matID][couple][0][0],
             [pointMat[matID][couple][1][0]],
             [pointMat[matID][couple][0][1],
             [pointMat[matID][couple][1][1]],
             alpha=0.7)
    

    举个例子。

    【讨论】:

    • 感谢您的回答。但是,图 1 中的颜色并不是纯粹的风格,而是描绘了现象背后的物理原理。例如在第 9 点,您可以看到界面左侧的曲线与右侧两条曲线的交点颜色相同。在正下方的交点上,曲线 3 与曲线 1 和 4 的交点具有相同的值。这是棘手的部分。
    • @MaximeS 我不知道这背后的物理原理。但从第 22 点和第 36 点开始,随着两条线重叠,它们似乎都变得更暗了。这正是我对重叠
    • 老实说,我认为透明度的想法很好,但遗憾的是数学并没有遵循,或者至少只是部分遵循(恭喜,它在第 22 点有效!!)。例如,这对于 [240,360] 处的相交根本不起作用。然而,添加相交曲线的值可以创造一些好的东西!我会调查的
    猜你喜欢
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 2010-11-28
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多