Matplotlib fontsize in terms of axis units

I am adding a text box to the plot. To determine the size of the letters, I use the fontsize parameter:

 import matplotlib.pyplot as plt r = plt.Rectangle((2,2), 10, 10, fill = False) plt.gca().add_patch(r) plt.text(7, 7, 'my rectangle', fontsize = 12, ha='center', va='center') plt.axis(xmin = 0, xmax = 14, ymin = 0, ymax = 14) 

I want the text "my rectangle" to be exactly 2 units (along the Y axis). Is there any way to do this?

+8
python matplotlib plot
source share
1 answer

I doubt this is exactly 2 data blocks, but it looks pretty close:

 import matplotlib.pyplot as plt r = plt.Rectangle((2,2), 10, 10, fill = False) plt.gca().add_patch(r) ymin, ymax = (0, 14) plt.axis(xmin = 0, xmax = 14, ymin=ymin, ymax=ymax) # Get dimensions of y-axis in pixels y1, y2 = plt.gca().get_window_extent().get_points()[:, 1] # Get unit scale yscale = (y2-y1)/(ymax-ymin) # We want 2 of these as fontsize fontsize = 2*yscale print fontsize, 'pixels' txt = plt.text(7, 7, u"\u25AF" + 'my rectangle', fontsize=fontsize, ha='center', va='center') plt.savefig('test.png') 

test.png

To make this work when resizing, you need to add a callback.

+1
source share

All Articles