我如何生成这个图表?
我如何生成这个图表?
有没有一个库可以用来生成下面的图形?\n[图片链接](https://i.stack.imgur.com/hLOwI.png)\n我目前尝试的最接近的方法是生成两个独立的图形,然后将它们转换为numpy数组图像,然后将它们相加。但是我的解决方案中没有图例。\n
import cv2 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.plot(range(10),'b') ax.set_xlabel('A') ax.set_ylabel('B') ax.yaxis.set_label_position("right") ax.spines['bottom'].set_color('blue') ax.spines['right'].set_color('blue') ax.xaxis.label.set_color('blue') ax.yaxis.label.set_color('blue') ax.tick_params(axis='x', colors='blue') ax.tick_params(axis='y', colors='blue') ax.tick_params(right=True, left=False, top=False, labelleft=False, labelright=True) fig.canvas.draw() data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='') data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(range(10),'r') ax.set_xlabel('A') ax.set_ylabel('B') ax.xaxis.set_label_position("top") ax.spines['top'].set_color('red') ax.spines['left'].set_color('red') ax.xaxis.label.set_color('red') ax.yaxis.label.set_color('red') ax.tick_params(axis='x', colors='red') ax.tick_params(axis='y', colors='red') ax.tick_params(left=True, right=False, bottom=False, top=True, labeltop=True, labelbottom=False) fig.canvas.draw() data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='') data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
\n[图片链接](https://i.stack.imgur.com/hj6NG.png)\n[图片链接](https://i.stack.imgur.com/urIcK.png)
如何生成这个图?
问题原因:用户想要在同一图中同时显示两个不同范围的数据,并且希望使用不同的颜色来表示不同的数据。
解决方法:用户可以使用matplotlib中的twinx()和twiny()函数来实现这个目的。下面是一个示例代码:
import matplotlib.pyplot as plt fig = plt.figure() ax1 = plt.subplot(111) line1, = ax1.plot(range1, data1, 'r', label='data1-range1') ax1.set_xlabel('range1') ax1.set_ylabel('data1') ax1.xaxis.label.set_color('red') ax1.yaxis.label.set_color('red') ax1.tick_params(axis='both', colors='red') _temp = ax1.twinx() ax2 = _temp.twiny() ax2.set_xlabel('range2') line2, = ax2.plot(range2, data2, 'b', label='data2-range2') ax2.tick_params(axis='x', colors='blue') ax2.xaxis.label.set_color('blue') _temp.tick_params(axis='y', colors='blue') _temp.set_ylabel('data2', rotation=-90, labelpad=10, color='blue') ax2.spines['left'].set_color('red') ax2.spines['top'].set_color('blue') ax2.spines['bottom'].set_color('red') ax2.spines['right'].set_color('blue') plt.legend([line1, line2], ['range1-data', 'range2-data2'], loc='lower right') plt.show()
这段代码首先创建了一个图形对象fig,并在该对象上创建了一个子图ax1。然后,使用ax1.plot()函数绘制了第一个数据集,使用红色表示,并设置了相关的标签和颜色。接着,通过ax1.twinx()创建了一个与ax1共享y轴的双y轴对象_temp,并使用_temp.twiny()创建了一个与_temp共享x轴的双x轴对象ax2。然后,使用ax2.plot()函数绘制了第二个数据集,使用蓝色表示,并设置了相关的标签和颜色。最后,使用ax2.spines[]设置了边框的颜色,并使用plt.legend()添加了图例。最后,使用plt.show()函数显示了图形。
通过使用twinx()和twiny()函数,用户可以在同一图中显示两个不同范围的数据,并使用不同的颜色进行标识。