标签: subplot

Plotly (Python) - 100 多个子图 y 轴

我正在处理大数据集,需要绘制多个堆叠趋势图,但遇到了与绘图中允许的 y 轴数量相关的问题。我尝试了多种方法来解决这个问题,但没有效果。

每当我尝试使用 100 多个 y 轴趋势绘制数据图表时,趋势就会开始超越之前的趋势。这是我尝试绘制 106 种趋势的图像:

106 趋势

如果将趋势数量减少到 99 个趋势,则所有这些都会显示在图表中:

99 种趋势

我正在使用plotly 的python API 在ipython 笔记本中构建这些图表。

一张图中允许的 y 轴数量是否有限制?

plot python-2.7 subplot multiple-axes plotly

5
推荐指数
0
解决办法
428
查看次数

带底图的 Matplotlib 子图动画

我正在尝试生成温度随时间变化的四面板动画。子图中的四个面板中的每一个都应该是一个动画地图;每个面板之间的差异在于所使用的数据。我已成功使用一组数据(没有子图)和以下代码生成动画:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.basemap import Basemap

#dummy temperature data with 10 time-steps
y=np.random.randn(10, 60, 100) 

fig = plt.figure()
m = Basemap(projection='kav7',lon_0=0)
lats=np.linspace(90,-90,y.shape[1])
lons=np.linspace(-180,180,y.shape[2])
lons, lats = np.meshgrid(lons,lats)

m.drawparallels(np.arange(-90.,99.,30.), labels=[1,0,0,0])
m.drawmeridians(np.arange(-180.,180.,60.), labels=[0,0,0,1])
m.drawcoastlines(linewidth=0.25)
m.pcolormesh(lons,lats,y[0],cmap=plt.cm.bwr, shading='flat',latlon=True)

def init():
    m                                                                                                                                                                                                                                                                                                 

def animate(i):
    m.pcolormesh(lons,lats,y[i],cmap=plt.cm.bwr, shading='flat',latlon=True)
    return m

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=10, interval=100) #interval = number of milliseconds between frames                                                                                                                                                                                                                                                                                                                       

anim.save('movie.mp4')
Run Code Online (Sandbox Code Playgroud)

我已经看过许多子图动画的示例(1、2、3 ) ,但仍然不知道如何使用底图来实现它。

python animation matplotlib subplot matplotlib-basemap

5
推荐指数
1
解决办法
1135
查看次数

在一个图形中绘制某些内容,然后在另一图形中再次使用它

我希望我在正确的地方问这个问题。

我有一个 for 循环,因为创建了许多数字。循环完成后,我想再生成一个图形,其中三个先前创建的图作为子图。

我现在的代码是这样的:

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t)*np.cos(2*np.pi*t)+(t/10)**2.

t1=np.arange(0.0,5.0,0.1)
t2=np.arange(0.0,5.0,0.02)


for i in range(2):
    fig= plt.figure(i)
    ax1=fig.add_subplot(111)
    plt.title('Jon Snow')
    kraft_plot,=ax1.plot(t1,np.sin(t1),color='purple')
    tyrion=ax1.axvline(2,color='darkgreen',ls='dashed')
    ax1.set_ylabel('Kraft [N]',color='purple',fontweight='bold')
    ax1.set_xlabel('Zeit [s]',fontweight='bold')
    ax2=ax1.twinx()
    strecke_plot,=ax2.plot(t2,t2/5,color='grey',label='Verlauf der Strecke')
    ax2.set_ylabel('Strecke [mm]',color='grey',fontweight='bold')
    ax1.legend((kraft_plot,tyrion,strecke_plot),('Jonny','Dwarf','andalltherest'),loc=2)

plt.show()
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗?我可以保存整个图/图吗?

干杯,达洛。

编辑:它应该看起来像这样(右侧部分是我想要实现的): 右侧的文本应该是正常的,显然......

问题是,我首先想要单独打印这些数字,然后一起打印(最后我想保存为 pdf/png,其中包含三个数字)

python numpy matplotlib subplot

5
推荐指数
1
解决办法
4912
查看次数

R 中子图plot_ly 中每个图附近的图例

我使用plotly 中的subplot 函数在我的R-shiny 应用程序中绘制两个图表(一个在另一个下)。图例对于这两个图来说都很常见,这意味着我只有一列将所有图例组合在一起。

我想在子图中将每个图表附近的图例分开。我怎样才能获得它?

p1 <-
 iris%>%
 group_by(Species)%>%
 plot_ly(x=~Sepal.Length, color= ~Species, legendgroup=~Species)%>%
 add_markers(y= ~Sepal.Width)
p2 <-
 iris%>%
 group_by(Species)%>%
 plot_ly(x=~Sepal.Length, color= ~Species, legendgroup=~Species)%>%
 add_markers(y= ~Sepal.Width)

 subplot(p1,p2, nrows = 2, shareX = T, shareY = F, titleX = T, titleY = T)
Run Code Online (Sandbox Code Playgroud)

上面代码的结果

我想要的布局如下: 想要的结果

r subplot plotly

5
推荐指数
1
解决办法
3308
查看次数

如何重新排列子图,使一个子图位于另一个子图下方?

我正在尝试对两个图进行编码,使一个图位于另一个图的下方。然而,我的代码不断将我的两个图相互对齐。这是我的代码:

import numpy as np
from scipy.integrate import odeint
from numpy import sin, cos, pi, array
import matplotlib
from matplotlib import rcParams
import matplotlib.pyplot as plt
from pylab import figure, axes, title, show
import xlsxwriter

plt.style.use('ggplot')

def deriv(z, t):
    l = 0.25    #unextended length of the spring, in m
    m = 0.25       #mass of the bob, in kg
    k = 29.43      #spring constant, in Nm^-1
    g = 9.81    #gravitational acceleration, in ms^-2
    
    x, y, dxdt, dydt = z
    
    dx2dt2 = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib subplot

5
推荐指数
1
解决办法
1万
查看次数

如何将字母放置在子图的角落,包括轴标签(不是轴的角落)

我想用左上角的字母(A,B,C,...)来标记子图,这些字母要么与 ylabels 对齐,要么与子图的实际角(而不是轴)对齐。

如果子图的宽度不同,我不能再使用轴变换坐标中带有偏移的文本,因为这会导致每个子图的距离不同。所以我通常使用偏移变换。但如果 ylabel 具有不同的宽度,这将不再起作用。我目前还关注每个图的偏移量,但这还不够好。

这是我到目前为止所拥有的:

import matplotlib.pyplot as plt
from matplotlib import transforms
import numpy as np

fig = plt.figure(figsize=(5, 2), constrained_layout=True)
gs = fig.add_gridspec(1, 3, width_ratios=[1, 2, 3])
axes = [fig.add_subplot(gs[i]) for i in range(3)]

ylabels = ["flat label", "bigger\nlabel", "even\nbigger\nlabel"]
labels = ["A", "B", "C"]

scaledtrans = transforms.ScaledTranslation(-0.4, 0, fig.dpi_scale_trans)

for ax, ylabel, label in zip(axes, ylabels, labels):
    ax.set_ylabel(ylabel)
    ax.text(0, 1, label, fontsize=12, fontweight="bold", va="bottom", ha="left",
           transform=ax.transAxes + scaledtrans)
Run Code Online (Sandbox Code Playgroud)

如下图所示,标签与轴脊的距离相同,但我希望它们与 ylabel 的左边缘或子图的角对齐,在这种情况下,它们与 ylabel 水平重合。但没有 transSubplot,只有 transAxes …

python text transform matplotlib subplot

5
推荐指数
1
解决办法
2690
查看次数

在python中水平绘制三个图像

我正在尝试绘制三张图像,其字幕位于其上方,但现在没有显示任何内容。

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('kids.tif')

# Averaged environment
avg_blur = cv2.blur(img,(5,5))
# Gaussian filter
gauss_blur = cv2.GaussianBlur(img,(0,0),5)
# Median filter
median_blur = cv2.medianBlur(img,5)

f, axarr = plt.subplots(nrows=1,ncols=3)
axarr[0].imshow(img)
axarr[1].imshow(avg_blur)
axarr[2].imshow(gauss_blur)

"""
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(avg_blur),plt.title('Averaged environment')
plt.xticks([]), plt.yticks([])
plt.show()
"""
Run Code Online (Sandbox Code Playgroud)

python image matplotlib subplot suptitle

5
推荐指数
1
解决办法
8874
查看次数

仅包含文本的子图

我有一个由许多子图条组成的图形。我希望我的一个子图只是一种文本框,它将列出我在周围所有图中使用的所有参数。

我怎样才能在Python中做到这一点?

有没有类似的东西plt.textbox("my text"),我可以让它看起来与图形上的任何绘图完全相同。

我不想在图形中包含文本,我想要一个仅由文本组成的子图。

python plot matplotlib subplot

5
推荐指数
1
解决办法
4326
查看次数

Plotly:如何将变量分配给子图标题?

我想在几个子图上显示额外的数据,并决定在子图标题中这样做。

我已经弄清楚如何向子图添加标题,但无法在每个子图中包含变量。到目前为止的代码是:

fig = make_subplots(rows=3, cols=1, subplot_titles=("Share Price is: ", "RSI is: ", "Portfolio Return is: "))
Run Code Online (Sandbox Code Playgroud)

我想在每个子图标题的末尾添加变量。

如何才能做到这一点?

python subplot plotly plotly-python

5
推荐指数
1
解决办法
3925
查看次数

如何将行标题添加到以下 matplotlib 代码中?

我正在尝试创建一个包含 8 个子图(4 行和 2 列)的图。为此,我编写了这段代码来读取 x 和 y 数据并按以下方式绘制它:

fig, axs = plt.subplots(4, 2, figsize=(15,25))
y_labels = ['k0', 'k1']

for x in range(4):
    for y in range(2):
        axs[x, y].scatter([i[x] for i in X_vals], [i[y] for i in y_vals])
        axs[x, y].set_xlabel('Loss')
        axs[x, y].set_ylabel(y_labels[y])
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果: 在此输入图像描述

但是,我想通过以下方式向所有行(而不是绘图)添加标题(标题为黄色文本):

在此输入图像描述

我在这里找到了这张图片和一些执行此操作的方法,但我无法为我的用例实现此操作并收到错误。这是我尝试过的:

gridspec = axs[0].get_subplotspec().get_gridspec()
subfigs = [fig.add_subfigure(gs) for gs in gridspec]

for row, subfig in enumerate(subfigs):
    subfig.suptitle(f'Subplot row title {row}')
Run Code Online (Sandbox Code Playgroud)

这给了我错误:'numpy.ndarray' object has no attribute 'get_subplotspec'

所以我将代码更改为:

gridspec = axs[0, 0].get_subplotspec().get_gridspec()
    subfigs = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib subplot

5
推荐指数
1
解决办法
1688
查看次数