SORU
13 NİSAN 2011, ÇARŞAMBA


Python/Matplotlib - bir şekilde kesintili bir eksen olun.

Bir süreksiz x ekseni olan bir arsa pyplot oluşturmak için çalışıyorum. Bu çizilen her zamanki gibi ekseni böyle bir şey olacak

(değerler)----//----(daha sonra değerler)

// arasındaki her şey (değerler) atlama ve sen (daha sonra değerler) gösterir.

Bu örnekler bulmak mümkün olmamıştır, eğer mümkün olup olmadığını merak ediyorum. Örneğin, mali bilgiler için süreksizlik üzerinden veri katılabilirsiniz biliyorum, ama ekseni atlama daha açık yapmak istiyorum. Şu anda sadece subplots kullanıyorum ama gerçekten her şey sonunda aynı grafik üzerinde kalmasını istiyorum.

CEVAP
14 NİSAN 2011, PERŞEMBE


Paul cevap bu işi gayet iyi bir yöntemdir.

Eğer özel bir dönüşüm yapmak istiyorsanız Eğer doğru değilse ancak, aynı etkiyi yaratacak iki subplots kullanabilirsiniz.

Sıfırdan bir örnek koymak yerine, an excellent example of this written by Paul Ivanov matplotlib örnekleri (sadece birkaç ay önce işlendiği gibi, yalnızca geçerli gıt ucu. oraya Henüz.) web sayfasında değil.

Bu sadece bu örnek basit bir değişiklik, bir kesintili x ekseni y ekseni yerine sahip olmaktır. Bu bir CW post yapıyorum neden olan)

Temel olarak, sadece böyle bir şey yapmak:

import matplotlib.pylab as plt
import numpy as np

# If you're not familiar with np.r_, don't worry too much about this. It's just 
# a series with points from 0 to 1 spaced at 0.1, and 9 to 10 with the same spacing.
x = np.r_[0:1:0.1, 9:10:0.1]
y = np.sin(x)

fig,(ax,ax2) = plt.subplots(1, 2, sharey=True)

# plot the same data on both axes
ax.plot(x, y, 'bo')
ax2.plot(x, y, 'bo')

# zoom-in / limit the view to different portions of the data
ax.set_xlim(0,1) # most of the data
ax2.set_xlim(9,10) # outliers only

# hide the spines between ax and ax2
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.yaxis.tick_left()
ax.tick_params(labeltop='off') # don't put tick labels at the top
ax2.yaxis.tick_right()

# Make the spacing between the two axes a bit smaller
plt.subplots_adjust(wspace=0.15)

plt.show()

enter image description here

// etkisi kırık eksen çizgileri eklemek için, bunu yapabiliriz (yine Paul Ivanov'un örnek değiştirilmiş):

import matplotlib.pylab as plt
import numpy as np

# If you're not familiar with np.r_, don't worry too much about this. It's just 
# a series with points from 0 to 1 spaced at 0.1, and 9 to 10 with the same spacing.
x = np.r_[0:1:0.1, 9:10:0.1]
y = np.sin(x)

fig,(ax,ax2) = plt.subplots(1, 2, sharey=True)

# plot the same data on both axes
ax.plot(x, y, 'bo')
ax2.plot(x, y, 'bo')

# zoom-in / limit the view to different portions of the data
ax.set_xlim(0,1) # most of the data
ax2.set_xlim(9,10) # outliers only

# hide the spines between ax and ax2
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.yaxis.tick_left()
ax.tick_params(labeltop='off') # don't put tick labels at the top
ax2.yaxis.tick_right()

# Make the spacing between the two axes a bit smaller
plt.subplots_adjust(wspace=0.15)

# This looks pretty good, and was fairly painless, but you can get that
# cut-out diagonal lines look with just a bit more work. The important
# thing to know here is that in axes coordinates, which are always
# between 0-1, spine endpoints are at these locations (0,0), (0,1),
# (1,0), and (1,1). Thus, we just need to put the diagonals in the
# appropriate corners of each of our axes, and so long as we use the
# right transform and disable clipping.

d = .015 # how big to make the diagonal lines in axes coordinates
# arguments to pass plot, just so we don't keep repeating them
kwargs = dict(transform=ax.transAxes, color='k', clip_on=False)
ax.plot((1-d,1 d),(-d, d), **kwargs) # top-left diagonal
ax.plot((1-d,1 d),(1-d,1 d), **kwargs) # bottom-left diagonal

kwargs.update(transform=ax2.transAxes) # switch to the bottom axes
ax2.plot((-d,d),(-d, d), **kwargs) # top-right diagonal
ax2.plot((-d,d),(1-d,1 d), **kwargs) # bottom-right diagonal

# What's cool about this is that now if we vary the distance between
# ax and ax2 via f.subplots_adjust(hspace=...) or plt.subplot_tool(),
# the diagonal lines will move accordingly, and stay right at the tips
# of the spines they are 'breaking'

plt.show()

enter image description here

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • Grace Su

    Grace Su

    6 Ocak 2006
  • njhaley

    njhaley

    24 NİSAN 2006