在多个单位/表示中绘制相同的数字关系

时间:2014-11-18 13:59:42

标签: python numpy matplotlib

考虑XY关系,对于XY单位系统的更改,数值关系会更改。

如何在相同图中的两个单位系统中绘制此关系? (即显示相同单个图的两个 X轴和两个 Y轴,而不是在两个单独的图中显示此关系)< / p>

在我的特定情况下,我有以下两个图。右边的那个简单地渲染相同的数据,将其标准化为percentages of the total quantities involved

以下是一个例子:

import numpy as np
import matplotlib.pyplot as plt

ar = np.array([80, 64, 82, 72,  9, 35, 94, 58, 19, 41, 42, 18, 29, 46, 60, 14, 38,
       19, 20, 34, 59, 64, 46, 39, 24, 36, 86, 64, 39, 15, 76, 93, 54, 14,
       52, 25, 14,  4, 51, 55, 16, 32, 14, 46, 41, 40,  1,  2, 84, 61, 13,
       26, 60, 76, 22, 77, 50,  7, 83,  4, 42, 71, 23, 56, 41, 35, 37, 86,
        3, 95, 76, 37, 40, 53, 36, 24, 97, 89, 58, 63, 69, 24, 23, 95,  7,
       55, 33, 42, 54, 92, 87, 37, 99, 71, 53, 71, 79, 15, 52, 37])

ar[::-1].sort()
y = np.cumsum(ar).astype("float32")

# Normalize to a percentage
y /=y.max()
y *=100.

# Prepend a 0 to y as zero stores have zero items
y = np.hstack((0,y))

# Get cumulative percentage of stores
x = np.linspace(0,100,y.size)

# Plot the normalized chart (the one on the right)
f, ax = plt.subplots(figsize=(3,3))
ax.plot(x,y)

# Plot the unnormalized chart (the one on the left)    
f, ax = plt.subplots(figsize=(3,3))
ax.plot(x*len(ar), y*np.sum(ar))

enter image description here enter image description here

参考文献:

  • This thread讨论了如何在同一个地块上绘制多个轴。
  • This thread显示了如何获取Lorenz图,这是这些图表所代表的,给定输入数组ar

2 个答案:

答案 0 :(得分:1)

原始答案

This example,来自优秀的matploblib文档,完全解决了您的问题,除了您可能想要使用 ad hoc 解决方案用于辅助轴&#39;蜱(我的意思是,有百分比的那些)。

OP没有消息

我想&#34;我的答案是否可能完全远离OP需求?&#34;不久我觉得有必要自己检查......按照链接和工作一点点我就可以获得下面的情节(请注意,我的数据与OP的数据不同)

enter image description here

这似乎与OP请求类似,但是谁知道呢?我原来的答案不够好吗? 我的回答被接受了还有什么办法呢?

答案 1 :(得分:0)

试试这个

# Plot the normalized chart (the one on the right)
f, ax = plt.subplots(figsize=(3,3))
ax.plot(x,y)
ax1 = ax.twinx().twiny()
ax1.plot(x*len(ar), y*np.sum(ar), 'r')

enter image description here