【问题标题】:How to sort a historical timeline written with Python matplotlib?如何对用 Python matplotlib 编写的历史时间线进行排序?
【发布时间】:2018-08-02 21:25:33
【问题描述】:

为了显示一个非常简单的古代历史时间线(受 Wolfram Alpha 时间线的启发),我稍微修改了 S.O. 上的一个小 Python 程序。 (How to draw a bar timeline with matplotlib?) :

import matplotlib.pyplot as plt
import numpy as np

event = np.array(['Antiquity','Egypt','W.R.Empire','E.R.Empire','Writing','C.Colomb','Middle Ages'])
begin = np.array([-3400,-3150,285,330,-3400,1492,476])
end = np.array([476,30,476,1453,-3300,1493,1492])

plt.barh(range(len(begin)), end-begin, left=begin, align='center')

plt.yticks(range(len(begin)), event)

plt.show()

如何按开始日期对时间线进行排序(升序)? 原因是我希望在数据到来时输入数据(Minoans、Elam 等),而不必每次都重新排列数组,这会很乏味。

这不是家庭作业。我只是一个 Python 新手,我不知道如何回答我自己的问题……

【问题讨论】:

  • 您可能误解了问答的概念。你问一个特定的问题,并得到该问题的一个或多个答案。现在看来,这些问题中的每一个都已经被问过了。如果不是,那么在 SO 上没有答案的每个问题都应该有自己的问题和答案。
  • @ImportanceOfBeingErnest:我编辑了这个问题……

标签: python matplotlib timeline


【解决方案1】:

您可能想要对值进行排序。

import matplotlib.pyplot as plt
import numpy as np

event = np.array(['Antiquity','Egypt','W.R.Empire','E.R.Empire','Writing','Middle Ages'])
begin = np.array([-3400,-3150,285,330,-3400,476])
end = np.array([476,30,476,1453,-3300,1493])

beg_sort = np.sort(begin)
end_sort = end[np.argsort(begin)]
evt_sort = event[np.argsort(begin)]

plt.barh(range(len(beg_sort)), end_sort-beg_sort, left=beg_sort, align='center')

plt.yticks(range(len(beg_sort)), evt_sort)

plt.show()

【讨论】:

  • (好名字,顺便说一句:你不是布拉克内尔夫人,毕竟……):它有效。非常感谢 !我可以问一个附带问题:是否可以采用甘特图方式(从 tpo 左到右下)?这只是一个附带问题:如果您愿意,可以忽略它。再次感谢。
  • 是的:顶部是古代,底部是中世纪。抱歉打扰了……
  • 完成。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2018-11-25
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
  • 2018-09-13
  • 2021-11-06
相关资源
最近更新 更多