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.
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()