简体   繁体   English

Matplotlib在图形上绘制形状

[英]Matplotlib plotting shapes on a graph

I'm trying to draw a shape on a graph. 我正在尝试在图形上绘制形状。 Here is my code... 这是我的代码...

    def graphData(self, stock):
    stock_file = Company.objects.get(ticker_name=stock)
    stock_file = stock_file.data
    stock_file = stock_file.replace("[","").replace("]","").replace("'","")
    stock_file = re.sub("(([^,]*,){5}[^,]*),\s*","\\1\n",stock_file)
    file_name = "/home/philip/PycharmProjects/stockmarket/static/stock_data/data_file.txt"
    file = open(file_name, "w")

    points = [[2, 4], [2, 8], [4, 6], [6, 8]]
    line = plt.Polygon(points, closed=None, fill=None, edgecolor='r')

    file.write(stock_file)
    file.close()
    date, closep, highp, lowp, openp, volume = np.loadtxt(file_name, delimiter=",", unpack=True, converters={ 0: date_converter })
    fig = plt.figure()
    ax1 = plt.subplot(1,1,1)
    ax1.plot(date, openp)
    ax1.plot(date, highp)
    ax1.plot(date, lowp)
    ax1.plot(date, closep)
    ax1.grid(True)
    ax1.xaxis.set_major_locator(mticker.MaxNLocator(10))
    ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
    for label in ax1.xaxis.get_ticklabels():
        label.set_rotation(90)
    plt.subplots_adjust(left=.10, bottom=.22, right=.93, top=.95)
    plt.xlabel('Date')
    plt.ylabel('Stock Price')
    plt.suptitle(stock+': Stock Price')
    plt.show()
    plt.savefig("/home/philip/PycharmProjects/stockmarket/static/graph.svg")

The two separate lines starting with points = ... and line = ... are the code I added to try and draw the shape. points = ...line = ...开头的两条单独的线是我为尝试绘制形状而添加的代码。 Why is this not working? 为什么这不起作用?

Call ax.add_patch(line) to add the Polygon to the axes, ax : 调用ax.add_patch(line)Polygon添加到轴ax

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(2016)

points = [(2, 4), (2, 8), (4, 6), (6, 8)]
line = plt.Polygon(points, closed=None, fill=None, edgecolor='r')

fig = plt.figure()
ax = plt.subplot(1,1,1)
ax.add_patch(line)

date = np.linspace(0, 7, 100)
openp = (3*np.sin(8*date)/date)+6
ax.plot(date, openp)
ax.set(xlim=(1,7), ylim=(3,9))
plt.show()

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM