Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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_Pandas_Matplotlib_Ranking - Fatal编程技术网

如何使用Python绘制能源排名图?

如何使用Python绘制能源排名图?,python,pandas,matplotlib,ranking,Python,Pandas,Matplotlib,Ranking,这是一些已发表论文中使用的典型能源排名,我正在努力使用Python(任何matplotlib、sns等)为我的数据复制一个。我在熊猫数据框中构建了数据,如下所示: System Color_id Data1 Data2 Form I 1 0.0 0.6 Form II 2 0.8 0.0 Form III 3 2.1 2.7 Form IV 4 2.2 0.3 Form V 5 1.7

这是一些已发表论文中使用的典型能源排名,我正在努力使用Python(任何matplotlib、sns等)为我的数据复制一个。我在熊猫数据框中构建了数据,如下所示:

System  Color_id  Data1  Data2
Form I     1      0.0    0.6
Form II    2      0.8    0.0
Form III   3      2.1    2.7
Form IV    4      2.2    0.3
Form V     5      1.7    1.2
我添加了“Color\u id”列以启用特定的\u column\u值着色,就像在matplotlib中一样,我想我只是在使用plt.scatter。我最困难的是绘制细长的线而不是典型的标记,以及如何在不同数据的类似系统之间自动连接这些虚线?非常感谢您的任何帮助或建议


我实施了我在评论中建议的一个示例。这不会自动缩放轴(我对其进行了硬编码),也不会添加刻度标签,但这些都是您应该能够在其他问题上找到的内容

import matplotlib.pyplot as plt
import numpy as np

def energy_rank(data, marker_width=.5, color='blue'):
    y_data = np.repeat(data, 2)
    x_data = np.empty_like(y_data)
    x_data[0::2] = np.arange(1, len(data)+1) - (marker_width/2)
    x_data[1::2] = np.arange(1, len(data)+1) + (marker_width/2)
    lines = []
    lines.append(plt.Line2D(x_data, y_data, lw=1, linestyle='dashed', color=color))
    for x in range(0,len(data)*2, 2):
        lines.append(plt.Line2D(x_data[x:x+2], y_data[x:x+2], lw=2, linestyle='solid', color=color))
    return lines

data = np.random.rand(4,8) * 4 # 4 lines with 8 datapoints from 0 - 4

artists = []
for row, color in zip(data, ('red','blue','green','magenta')):
    artists.extend(energy_rank(row, color=color))

fig, ax = plt.subplots()

for artist in artists:
    ax.add_artist(artist)
ax.set_ybound([0,4])
ax.set_xbound([.5,8.5])

我不确定这在技术上是否是这个问题的答案,但我开发了一个基于tkinter的Python应用程序,用于以直观的方式绘制这些图形

我认为它可能有用,请在以下网址查看:

以下是用户界面的外观:

以下是典型输出图的外观:

技术说明:

在引擎盖下,相应SVG代码的程序生成(逐元素生成)用于图形准备。大部分操作都是通过名为SvgGenEsp的类完成的,这里不会详细介绍,因为它太长(300多行代码)。

也许会有帮助:标记是以unicode字符呈现的,因此有很多选择,但它们不容易修改。给定连接虚线之间的宽度无论如何都需要两个点,因此我建议创建一个辅助函数,为实线和虚线分别生成线艺术家,并为您的输入对每个人进行排序@亚伦:你的实现太棒了。非常感谢。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-我很感激这些建议,并据此修改了我的答案。