How to plot two plotly figures with common animation_frame - python

I am trying to plot both a scatterplot and a line plot, in the same figure. One is for objects and the other for lane markers. The outcome should be one figure with one time slider, that will update both objects and lane markers.
Current code
fig3 = go.Figure()
fig1 = px.line(data_frame=objects,x="Long", y="Lat",color="ObjID", animation_frame="rounded_time")
fig2 = px.scatter(data_frame=lanes,x="y", y="x", color="Location", animation_frame="rounded_time")
fig3 = go.Figure(data=(fig1.data + fig2.data))
This gives me a nice plot but missing the animation slider:
Is there any easy way to add plots to the same figure while retaining the animation_frame?

So, after a lot of googling I have found nothing on this. I think I have to use Plotly Graph Objects to achieve this.
So right now I am trying to learn how to use plotly go, having hard time finding any tutorials on plotly go, plenty on plotly express though..

Related

How can we prevent a funnel chart from bleeding into different levels?

I have a simple dataframe and I'm running this simple code.
from plotly import graph_objects as go
fig = px.funnel(df, x='MeanDispatchedTime', y='Station_Name', color='MED_Type')
fig.show()
Is there some way to get the colors separate and distinct, so the red doesn't bleed into the lower levels? I'm looking at the documentation here.
https://plotly.com/python/funnel-charts/
Or, perhaps, this is completely the wrong chart to be using to tell the story...

Creating a plotly vrect over all axis of a matplotlib plot

I have a complete matplotlib figure with multiple subplots and I want to add a vertical span in a specific range to all of the subplots. The remaining plot is then converted to plotly.
If I try running xvspan over each individual subplot when creating the matplotlib figure, the vertical spans do not make it into the plotly figure.
If I try converting the figure into plotly first and then adding a vrect, this vrect only seems to work for the first subplot. I have tried using row = "all" to no avail.
Any other ideas?
Thanks!

Plotting pandas vs matplotlib

For a little jupyter notebook widget i tried the following:
with output:
fig, ax = plt.subplots(constrained_layout=True, figsize=(6, 4))
# move the toolbar to the bottom
fig.canvas.toolbar_position = 'bottom'
ax.grid(True)
line, = ax.plot(df.index, init_data, initial_color,)
ax.set_ylabel('CH4_HYD1')
ax.set_ylabel('')
But the data gets plotted in a wierd way. When isolating the plotting method and comparing it to the pandas default, the pandas plot displays the data correctly.
df['CH4_HYD1'].plot()
Pandas plot
plt.plot(['CH4_HYD1'])
Wrong plot?
I would like to use the axis plot method to produce a plot with multiple lines of different features. But I can't find the probably very simple error... What is the difference here?
This is a short example of how to plot multiple lines from a DataFrame with matplotlib and with pandas. Essentially, pandas uses matplotlib to do the plots so it shouldn't be different.
Anyway, I encourage you to look into seaborn. This is a great library based on pandas and matplotlib that enables visualizing dataframes easily.

How to add a clear border around a graph with matplotlib.pyplot

I created a stacked barchart using matplotlib.pyplot but there is no border around the graph so the title of the graph and axes are right up against the edge of the image and get cutoff in some contexts when I use it. I would like to add a small clear or white border around the graph, axes and title. repos_amount is a pandas DataFrame.
Here is my code:
colors = ["Green", "Red","Blue"]
repos_amount[['Agency','MBS','Treasury']].plot.bar(stacked=True, color=colors, figsize=(15,7))
plt.title('Total Outstanding Fed Repos Operations', fontsize=16)
plt.ylabel('$ Billions', fontsize=12)
Here is what the graph looks like:
I tried the suggestions from the link below and I could not figure out how to make it work. I'm not good with matplotlib yet so I would need help figuring out how to apply it to my code.
How to draw a frame on a matplotlib figure
Try adding plt.tight_layout() to the bottom of your code.
Documentation indicates that this tries to fit the titles, labels etc within the subplot figure size, rather than adding items around this figure size.
It can have undesirable results if your labels or headings are too big, in which case you would then need to look into the answers in this thread to adjust the specific box size of your chart elements.

show two plot together in Matplotlib like show(fig1,fig2)

In general, I don't have any problem to put two plots in a figure like plot(a);plot(b) in matplotlib. Now I am using a particular library which would generate a figure and I want to overlay with boxplot. Both are generated by matplotlib. So I think it should be fine but I can only see one plot. Here is the code. I am using beeswarm and here is its ipython notebook. I can only plot beeswarm or boxplot but not both in a figure. My main goal is trying to save column scatter plot and boxplot together as a figure in pdf. Thanks,
from beeswarm import beeswarm
fig=plt.figure()
figure(figsize=(5,7))
ax1=plt.subplot(111)
fig.ylim=(0,11)
d2 = np.random.random_integers(10,size=100)
beeswarm(d2,col="red",method="swarm",ax=ax1,ylim=(0,11))
boxplot(d2)
The problem is with the positioning of the box plot. The default positioning list starts with 1 what shifts the plot to 1 and your beeswarm plot sits on 0.
So the plots are in different places of your canvas.
I modified your code a little bit and that seems to solve your problem.
from beeswarm import beeswarm
fig = plt.figure(figsize=(5,7))
ax1 = fig.add_subplot(111)
# Here you may want to use ax1.set_ylim(0,11) instead fig.ylim=(0,11)
ax1.set_ylim(0,11)
d2 = np.random.random_integers(10,size=100)
beeswarm(d2,col="red",method="swarm",ax=ax1,ylim=(0,11))
boxplot(d2,positions=[0])
Cheers

Categories

Resources