plt.axvline labels exceeding limit of plot problem - python-3.x

full - clearest image, shows the labels extending out the right of my plot
"zoomed" - highlighting why this is a problem as the plot becomes unreadable when selecting and plotting subset of the x-axis range
I'm working on some data where I have plotted a spectrum and have added vertical lines to specific positions. I have labelled these lines but my problem is that if I want to "zoom in" by decreasing my x axis range, the full list of labels for the vertical lines are still plotted resulting in an unreadable plot.
I iterate through a list of x positions and labels for my vertical lines and plot as follows:
for x_pos, label in zip(list_x_pos, list_label):
plt.axvline(x=x_pos)
plt.text(x_pos, y, str(label), rotation=90)
plt.xlim(2, 5)
So, because my "x values" go > 5 the resulting plot is a tiny figure with a row of the labels extending out from it.
The only solution I can think of is to slice my list_x_pos but this will crate other problems for me so ideally looking to find a way to just show the labels within the range of the plot.
Hope I've made sense!
Thanks,
Olie

You can use plt.text(..., clip_on=True) to force texts outside of the box to not be displayed.

Resize the axes first and then plot the vertical line.

Related

How can you remove/add specific grid line in excel diagram?

So, I want to keep only 1 red axis line. By default it shows or removes both of them, shows 1 line for each "row".
Don't know how to change my excel to english, sorry.
You need to use some tricks for this. Use an XY Scatter chart and plot the two lines as two series, one for the horizontal line, one for the vertical line.
Then format the axes to the desired maximum and remove all the grid lines.
If you want only specific numbers to show on the axes, remove the axis labels altogether and use data labels for data points instead.

How to bring Excel chart data labels in front of axis

I created a custom data label series using "Value From Cells" to have a label at the end of the chart displaying the current value. Unfortunately, the axis labels are "on top"/"in front" of the data label. Is there any way to change this (VBA or otherwise)?
I just came up with a kind of absurd workaround. I'll do my best to explain it here in case anyone else comes across this.
To make this easier, the point I want the data label for will be called A. This is the latest value of the original series that should be labeled off to the right of the chart.
I removed the old data labels.
I created a scatter plot with one point: (0,y). The y value was set to A as a percentage of the minimum to maximum y-axis range. So if A is 3 and the y-axis range is -2 to 10, then the y-value would be 3/(10 - -2) = 3/12 = .25. So the result would be a scatter plot with one point at (0,.25).
I made everything on the scatter plot chart (e.g. plot area) invisible EXCEPT the one scatter plot point. This gives me a floating scatter point that moves up and down the y-axis, depending on the percentage calculated above.
I added a y-axis to the scatter plot, and set the minimum to 0 and the maximum to 1. I then removed the axis. This was only to set that min/max.
I moved my scatter plot so that the top/bottom of the plot area was exactly even with the top/bottom of the plot area of my original chart. So now, I have a single point that is moving up and down along the height of the original chart's plot area. Its up/down position is determined by A, and it will line up exactly with the y-position of A (because that's how I designed it).
I added a data label to the scatter plot and hid the scatter plot series. So now, I have my data label in the correct up/down position (lined up with the A).
Change the data label "Label Options" --> "Label Contains" to "Value From Cells". Then reference a cell with A's value that we want displayed (instead of the % value we used to get the up/down position right).
Last step is just to move the scatter plot left/right until it's in the perfect spot to the right of the plot area, and done!
Then repeat that miserable process for 16 charts with copy/paste when possible. Hope this helps someone else!

Can't align x-axis on hybrid scatter/area chart

Please have a look at This Excel chart. Here is a screenshot:
Here is the data:
There is a scatter series of blue of dots (plus a trendline) and a green area series. The chart data are contained within the series.
The problem I have is that the x-axis values of the two series are not aligned. For example, the second and third blue dots at x = 3.1 and x = 3.8 are in the correct place along the x-axis, but in the green area series they appear to be above x = 2.0 and x = 3.3. How to fix this?
Change the Scatter to a Line Chart, then format Line Color so that there is "No Line". Add trendline.
There may be another way to do this while retaining the Scatterplot, I'm not sure, but this seems to be visually what you're looking for, but I think you will need to use a Line Chart for this unfortunately. The problem is summarized in this similar Q on SuperUser:
https://superuser.com/questions/964264/aligning-stacked-bar-chart-w-scatter-plot-data
The short answer is that your combining (unsuccessfully) a categorical series (the columns) with interval/ratio series (the line charts). So, Excel doesn't know how to plot your categories (columns) on an interval scale (the current X axis).
You can verify this by selecting Chart > Layout > Axes > Secondary Horizontal Axis > More Secondary Horizontal Axis Options. Without making any changes to the axes configuration, the second X-axis will now appear along the bottom of the chart, and you can see it is scaled differently from your Scatter data.
I.e., in the Scatter series, the data is X/Y pairs. But in your Area chart, it treats the X-values as categorical, and in this context "1.1" is no different than "Bob" -- it is a cardinal representation of the data rather than an ordinal representation.
The problem I have is that the x-axis values of the two series are not aligned.
So even though the two series appear to share the same set of X-Values, the Chart is simply incapable of treating those as the same type of data. The x-axes are not aligned because they are not the same data or even the same type of data!
All that said, if you change both series to XY Scatter, it is possible (with some extraordinary effort) to apply shading/coloring below a series or between two series, etc.
http://peltiertech.com/fill-under-between-series-in-excel-chart/
http://chandoo.org/wp/2013/02/13/shaded-line-charts-excel/
What you can do is plot the Area graph on a secondary axis. Then go to Chart -> Layout -> Axes -> Display Secondary Horizontal Axis to see the axis, right click for its properties and change the type of the Axis Type to "Date axis". This (kind of) changes the axis to a numerical type, as opposed to a category type.
However, the area graph will still be placed incorrectly too far to the right because Excel will continue to plot the series as a (kind of) category type, with its data points appearing in the centre of each category as opposed to at the correct x value like in an XY scatter plot.
To get the graphs overlaying the most correctly, you can create a Scaled-up x value series which is, say, 1,000 times the original x-values and use this for the x-values of the area plot. By scaling by 1,000 or 10,000, you eventually get the granularity to a point where it looks more like X-Y plot, but is actually an area plot, and the graphs look like they coincide perfectly.

Flip X and Y axis on Excel custom chart

I've made a chart with Excel 2010's "Combo" option for chart type so I can plot two data series for the same depth points. The image below shows the default, which is very close to what I want - except I would like to have the axes flipped so that the current X axis, which is depth, is displayed as the Y axis and both primary and secondary current Y axes plot as X axes. In other words, I'd like to rotate the chart area by 90 degrees clockwise. The "Switch Row/Column" doesn't do what I want (or expect) and I'm running out of both ideas and patience. Is there an easy fix? Or a hard fix?
Here's the plot as-is:
And here's a dummy plot of the end goal made by rotating the image around in Paint, in case the picture makes it clearer:
Finally, as was pointed out in the comments, the whole thing looks goofy and might be better plotted as a bar graph with two bars. I tried this as well and came away almost all set - but the gray bars plot from left to right and the blue bars plot from right to left. Seems like it should be as simple as changing the "Plot Series On" option to Primary Axis for both, but this destroys the graph.
I looked around and I think this link has instructions for what you're looking for: https://superuser.com/questions/188064/excel-chart-with-two-x-axes-horizontal-possible

Predicted vs observed plot with diagonal line and deviation

I am trying to plot predictions vs observations in a scatter plot showing the predicted values in x and the observed in y, so a perfect fit should be shown in the diagonal. Is there any way to plot that diagonal in excel as a line, so it is easier to see if the result is close to the ideal? Also, my model has a standard error that I would also like to show as upper and lower line. Something like this:
Any ideas how I could add the lines in excel? Thanks !!
[edit]
This happens if I add a new series to draw the diagonal line as a line plot:
Where 'line 1' gives me what is shown in the center image after I add a new series, and 'line 2' the one of the right if I add the cells to a existing axis. What I'm doing wrong? thanks
Create a new series for each line, with just two points for each series.
For the diagonal, the first point is at the intersection of the axes and the second is at the top right of the charted area. Format the series with a suitable line and no data points.
For the upper and lower lines, same technique but the first point is where the line intersects the y or x axis respectively.

Resources