Using matplotlib.pyplot.clabel to add labels with a transparent background - python-3.x

For matplotlib.pyplot.clabel, is it possible to add labels to a contour plot without the white space behind the labels covering up any portion the contour lines? When I try to add labels to a contour plot it tends to cover up part of the contour plot with white space. Perhaps there is a way of making the background of the text transparent?

Use the inline argument
plt.clabel(..., inline=False)

Related

Gnuplot - transparent surface plot without lines

I am plotting a transparent surface using pseudofile '++' (gnuplot 5.2):
set isosample 100
set style fill transparent solid 0.65
splot [0:5][0:5] '++' u 1:2:(sin($1)*sin($2)) w pm3d
but it results in a plot with both lines around each tile of the surface.
I am not sure how to make these transparent as the tiles, or how to suppress them altogether. Using the noborder or any border option of set style fill does not seem to change the output at all.
EDIT: The problem is actually terminal dependent.
above plot is with the qt terminal using its built in export
png, jpg and gif have lines :
But if exported as vector graphics (svg or pdf), again the screen rendering will depend on the viewer used (okular no lines, acrobat reader 9 has them), with some renderers having no lines: check here how your browser behaves (firefox, chromium, epiphany on my linux box are all line-free)
Output of show pm3d:
pm3d style is explicit (draw pm3d surface according to style)
pm3d plotted at SURFACE
taking scans direction automatically
subsequent scans with different nb of pts are flushed from BEGIN
flushing triangles are not drawn
clipping: all 4 points of the quadrangle in x,y ranges
pm3d quadrangles will have no border
steps for bilinear interpolation: 1,1
quadrangle color according to averaged 4 corners

How to place labels on top of the margin?

I am using gnuplot with epslatex terminal. I want to know how to put the
label on top of a margin, so that the part of margin under the label is invisible. In the figure I attached, the part of margin under the label
is still visible.
In principle you should be able to tell gnuplot to put your text labels into a box by using the set label ... front boxed, and the specify that the box should be opaque and white using something like set style textbox opaque noborder fillcolor rgb "white". However, this is not supported by all terminals, and epslatex seems to be one of those where this doesn't work.
However, in epslatex you can simply use latex commands to create a white background box around your label text:
set term epslatex standalone
set outp "test.tex"
set label "\\colorbox{white}{This is a label}" at 6.,0.5 front
plot sin(x)
set output
gives

gmtset BASEMAP_FRAME_RGB transparency

I want to not have my basemap axes visible for an image I'm making in GMT with several plots in it. So far I have made them white using:
gmtset BASEMAP_FRAME_RGB = white
However some of the plots partially overlap and the white axes can be seen over the plots - any ideas on how to fix this? By making the basemap frame transparent ideally.
In fact I've realised I can change the order I do the plots in so that the overlap doesn't matter - also replaced -B... with -G255 to plot on a blank square.

Gnuplot key opaque background

I am trying to move the legend of a plot in gnuplot partially outside the plot area. It seems however that the plot border is visible inside the legend, even if I set the legend property to opaque.
A minimum example showing the problem:
#!/usr/bin/gnuplot -persistent
set key at 11,1.02 box opaque
plot sin(x)/x
So, I wonder how I should go about in order to make the entire interior of the key opaque white? I've thought about putting a white rectangle behind it, but it seems to be a kind of dirty solution.
The opaque option of the key does indeed draw a white rectangle, but the border is drawn on top of the key. Use set border back to draw the border behind the key:
set key at 11,1.02 box opaque
set border back
plot sin(x)/x
There isn't an option to set the key color directly; people tend to resort to either drawing a box under the key (as you were thinking) or more complicated methods.
One workaround is to get rid of the plot border for the top and right edges of the plot (since the information there is redundant anyway):
set border 3
set tics nomirror
plot sin(x)/x
Another possibility is simply moving the key--does it need to be right on the edge of the plot? It could be further inside or outside.

How to make plots larger in GnuPlot

I am generating mapped 3D plots using the following config file (XRANGE and YRANGE are set later)
#!/usr/bin/gnuplot
reset
set term postscript eps enhanced
set size square
set xlabel "X position"
set ylabel "Y position"
#Have a gradient of colors from blue (low) to red (high)
set pm3d map
set palette rgbformulae 22,13,-31
set xrange [0 : XRANGE]
set yrange [0 : YRANGE]
set style line 1 lw 1
unset key
set dgrid3d 45,45
set hidden3d
splot "data.data" u 1:2:3
The resulting image looks something like this
Note: I have converted to jpg so the quality is lower, and I have placed a border around the image.
A great deal of space is wasted above and below. This is not a problem until I embed the image into a LaTex document, at which point it will look like so (again, pdf document converted to jpg image)
The image on the right is also created with GnuPlot, but it is slightly larger (as is evident by looking at the border I have drawn around the top two images). The reason for this is because GnuPlot pads the 3D plot with top and bottom white space. How can I remove this without having to manually edit all 50+ plots I have?
There are two solutions to this, one is unreliable, the other is a hack.
Using GnuPlot, the margin settings can be used to specify distances from the appropriate margins. For example, setting lmargin 0 and bmargin 0 essentially pushes the axes off the page. Similar values can be assigned to the tmargin and rmargin to stretch the graph. Although this worked for 2D graphs, it did not work for 3D graphs (I suspect this has to do with the fact that I set the graph to be a square).
When graphs are set to be of square size, Gnuplot still calculates for the entire screen. The eps file can be manipulated directly to change this by looking for a line like so %%BoundingBox: 50 50 410 302 and changing 410 to something smaller. Alternatively, and this is what I did, you can run eps2eps in.eps out.eps and it will crop it for you. Just make sure in.eps is not the same file as out.eps or it won't work.
I also crop the Bounding Box afterwards, since I hate playing around with margins in gnuplot. I realized that somehow, eps2eps indeed does adjust the bounding box, but it also transforms text (labels etc) into pixel-graphic?!
I usually use "epstool" which conserves text as text when croping the bb, the command I use is:
epstool --copy --bbox in.eps out.eps
Use the <scale> argument in set view, this will magnify the plot without changing text size or title position.
In your case, because you use the map view, you need:
set view 180,0,1.5
where 180,0 is equivalent to map view and 1.5 is the scaling factor.

Resources