Iam new to matplotlib and here is an image of simplified plot of the situation: http://postimg.org/image/qkdm6p31p/
I would like to have a red marker for the values above a certain threshold value, in this case, the two points above the red line to have a red marker. Is it possible in matplotlib?
And I really don't get why my code never completes execution when I close the window.
Here's my code :
import wx
import numpy as np
import matplotlib
matplotlib.use('WXAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
class GraphFrame(wx.Frame):
def __init__(self):
self.displaySize = wx.DisplaySize()
wx.Frame.__init__(self, None, -1,
style = wx.DEFAULT_FRAME_STYLE,
size = (self.displaySize[0], self.displaySize[1]))
self.threshold = 3000
self.create_main_panel()
self.draw_plot()
def create_main_panel(self):
self.panel = wx.Panel(self,-1, style = wx.SUNKEN_BORDER)
self.fig = plt.figure()
self.canvas = FigureCanvas(self.panel, -1, self.fig)
self.panelsizer = wx.BoxSizer(wx.HORIZONTAL)
self.panelsizer.Add(self.canvas, 1, wx.EXPAND)
self.panel.SetSizer(self.panelsizer)
mainsizer = wx.BoxSizer(wx.VERTICAL)
mainsizer.Add(self.panel, 1, wx.EXPAND )
self.SetSizerAndFit(mainsizer)
self.init_plot()
def init_plot(self):
self.axes = self.fig.add_subplot(111)
self.axes.set_axis_bgcolor('white')
self.axes.set_title('TITLE', size=12)
self.data = ['2000','2869','4694','2356','3600','1500']
self.xmin = 0
self.xmax = len(self.data)
def draw_plot(self):
self.plot_data = self.axes.plot(
self.data,
linewidth=3,
label = "plot1",
marker = "o",
markersize =7,
)[0]
self.plot_data.set_xdata(np.arange(len(self.data)))
self.plot_data.set_ydata(np.array(self.data))
thresholdplot = self.axes.plot([self.xmin,self.xmax], [self.threshold,self.threshold],"r--",label = "threshold",linewidth = 1)
lg=self.axes.legend(loc="upper left", bbox_to_anchor=(1,1),ncol=1)
self.canvas.draw()
if __name__ == "__main__":
app = wx.PySimpleApp()
app.frame = GraphFrame()
app.frame.Show()
app.MainLoop()
print "Finished"
I am using Matplotlib, wx with Python 2.7 Would really appreciate your help.
All of the line properties can be controlled by keyword arguments. For example, you can set the color, marker, linestyle, and markercolor with: plot(x, y, color='green', linestyle='dashed', marker='o', markerfacecolor='blue', markersize=12).
In an IPython notebook %matplotlib inline turns on “inline plotting”, where plot graphics will appear in your notebook. This has important implications for interactivity: for inline plotting, commands in cells below the cell that outputs a plot will not affect the plot.
Perhaps the easiest way to accomplish this effect would be to simply plot the subset of your data that is greater than the threshold value a second time. For example:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ys = np.random.rand(10)
threshold = 0.5
ax.axhline(y=threshold, color='r', linestyle=':')
ax.plot(ys)
greater_than_threshold = [i for i, val in enumerate(ys) if val>threshold]
ax.plot(greater_than_threshold, ys[greater_than_threshold],
linestyle='none', color='r', marker='o')
plt.show()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With