SourceForge logo
SourceForge logo
Menu

matplotlib-users — Discussion related to using matplotlib

You can subscribe to this list here.

2003 Jan
Feb
Mar
Apr
May
(3)
Jun
Jul
Aug
(12)
Sep
(12)
Oct
(56)
Nov
(65)
Dec
(37)
2004 Jan
(59)
Feb
(78)
Mar
(153)
Apr
(205)
May
(184)
Jun
(123)
Jul
(171)
Aug
(156)
Sep
(190)
Oct
(120)
Nov
(154)
Dec
(223)
2005 Jan
(184)
Feb
(267)
Mar
(214)
Apr
(286)
May
(320)
Jun
(299)
Jul
(348)
Aug
(283)
Sep
(355)
Oct
(293)
Nov
(232)
Dec
(203)
2006 Jan
(352)
Feb
(358)
Mar
(403)
Apr
(313)
May
(165)
Jun
(281)
Jul
(316)
Aug
(228)
Sep
(279)
Oct
(243)
Nov
(315)
Dec
(345)
2007 Jan
(260)
Feb
(323)
Mar
(340)
Apr
(319)
May
(290)
Jun
(296)
Jul
(221)
Aug
(292)
Sep
(242)
Oct
(248)
Nov
(242)
Dec
(332)
2008 Jan
(312)
Feb
(359)
Mar
(454)
Apr
(287)
May
(340)
Jun
(450)
Jul
(403)
Aug
(324)
Sep
(349)
Oct
(385)
Nov
(363)
Dec
(437)
2009 Jan
(500)
Feb
(301)
Mar
(409)
Apr
(486)
May
(545)
Jun
(391)
Jul
(518)
Aug
(497)
Sep
(492)
Oct
(429)
Nov
(357)
Dec
(310)
2010 Jan
(371)
Feb
(657)
Mar
(519)
Apr
(432)
May
(312)
Jun
(416)
Jul
(477)
Aug
(386)
Sep
(419)
Oct
(435)
Nov
(320)
Dec
(202)
2011 Jan
(321)
Feb
(413)
Mar
(299)
Apr
(215)
May
(284)
Jun
(203)
Jul
(207)
Aug
(314)
Sep
(321)
Oct
(259)
Nov
(347)
Dec
(209)
2012 Jan
(322)
Feb
(414)
Mar
(377)
Apr
(179)
May
(173)
Jun
(234)
Jul
(295)
Aug
(239)
Sep
(276)
Oct
(355)
Nov
(144)
Dec
(108)
2013 Jan
(170)
Feb
(89)
Mar
(204)
Apr
(133)
May
(142)
Jun
(89)
Jul
(160)
Aug
(180)
Sep
(69)
Oct
(136)
Nov
(83)
Dec
(32)
2014 Jan
(71)
Feb
(90)
Mar
(161)
Apr
(117)
May
(78)
Jun
(94)
Jul
(60)
Aug
(83)
Sep
(102)
Oct
(132)
Nov
(154)
Dec
(96)
2015 Jan
(45)
Feb
(138)
Mar
(176)
Apr
(132)
May
(119)
Jun
(124)
Jul
(77)
Aug
(31)
Sep
(34)
Oct
(22)
Nov
(23)
Dec
(9)
2016 Jan
(26)
Feb
(17)
Mar
(10)
Apr
(8)
May
(4)
Jun
(8)
Jul
(6)
Aug
(5)
Sep
(9)
Oct
(4)
Nov
Dec
2017 Jan
(5)
Feb
(7)
Mar
(1)
Apr
(5)
May
Jun
(3)
Jul
(6)
Aug
(1)
Sep
Oct
(2)
Nov
(1)
Dec
2018 Jan
Feb
Mar
Apr
(1)
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
2020 Jan
Feb
Mar
Apr
May
(1)
Jun
Jul
Aug
Sep
Oct
Nov
Dec
2025 Jan
(1)
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
S M T W T F S




1
(3)
2
(9)
3
(4)
4
(1)
5
6
(5)
7
(8)
8
(11)
9
(15)
10
(5)
11
(2)
12
13
(7)
14
(4)
15
(13)
16
(6)
17
(1)
18
19
(16)
20
(10)
21
(13)
22
(13)
23
(3)
24
(1)
25
(3)
26
(4)
27
(1)
28
(6)
29
(6)
30
(1)
31

Showing 11 results of 11

From: Stephen W. <ste...@cs...> - 2004年07月15日 22:40:49
As a new user of matplotlib, I'm surprised I haven't seen this
mentioned, offhand, in the mailing list archive. I am not seeing the
redraw or close widgets on the plot windows I produce. The platform is
Fedora Core 1, although I built on RHEL3 because matplotlib-0.60-2 won't
build on FC1 (some problem with tk-devel, apparently).
-- 
Stephen Walton <ste...@cs...>
Dept. of Physics & Astronomy, Cal State Northridge
From: John H. <jdh...@ac...> - 2004年07月15日 18:49:15
>>>>> "Kenneth" == Kenneth McDonald <ken...@sb...> writes:
 Kenneth> The easiest way to describe this is to repeat the info
 Kenneth> that's been posted into the "macpython" mailing
 Kenneth> list--sorry if you've already seen it. According to one
 Kenneth> of the people who helped me on the macpython list, the
 Kenneth> problem I'm having is likely caused by matplotlib using a
 Kenneth> custom method of finding Tcl/Tk headers, rather than by a
 Kenneth> Python/OS X interaction problem, which is why I'm
 Kenneth> bringing the topic over to this list.
The file I attached in my last email had an error in it. It would
probably work for darwin, but fail for linux. Here is the correct
file
http://matplotlib.sf.net/setupext.py
JDH
From: John H. <jdh...@ac...> - 2004年07月15日 14:15:45
>>>>> "MWallis" == MWallis <mw...@sw...> writes:
 MWallis> This has been my first time using matplotlib and it has
 MWallis> not been entirely successful . I was asked to develop a
 MWallis> GUI using Python and omniORB to connect as a client to a
 MWallis> server and request a data stream which they wanted me to
 MWallis> display. There is a considerable amount of data that is
 MWallis> generated and I am not sure that Python was going to be
 MWallis> able to handle it. I developed the app in Python and was
 MWallis> able to connect to the server using omniORB and register
 MWallis> a callback and receive the data. This worked fine. I
 MWallis> then created the GUI using matplotlib and pygtk. The
 MWallis> display included 2 spectrograms a pan display and 2 bar
 MWallis> charts. After data of the appropriate type was received
 MWallis> they wanted the displays to be updated dynamically. I
 MWallis> used threading but it still seemed that after awhile the
 MWallis> GUI would lock up. Are there any examples available that
 MWallis> embed multiple dynamically updated figures using gtk? I'm
 MWallis> afraid that if I can't get this fixed they will write
 MWallis> python and matplotlib off and refuse to use it again.
Hi Melissa,
I have little experience with threads and try to avoid using them
directly - I'll leave that to the pros. I suggest another approach -
a useful pygtk trick is to use the idle manager to avoid calls when
gtk is busy. In the script below, new axes images are created and
drawn only when gtk is idle. It doesn't do you any good to force feed
gtk data it can't handle, so only make calls through the idle handler.
I simulate a data event generator that calls one of two image axes.
On my system, I get about 10 frames per second with the script below
using gtkagg (gtkagg will probably be a little faster than gtk, which
uses string methods to render image data).
As for your clients giving up on us, remind them that image handling
in matplotlib has gotten an order of magnitude faster in the last 5
months and that further enhancements for dynamic updating are in the
works. One important one will be the ability to render only selective
parts of the canvas (eg, just redraw the axes image portion rather
than the entire canvas). My guess is that this change alone would
roughly double the performance of gtkagg for dynamic images. Other
optimizations specifically for updating image data would provide
further performance enhancements, since this is a simple agg->agg
rendering buffer transfer.
Also, although matplotlib-0.60.2 was just released, a bug that affects
image data with data extent set (eg specgram data) was recently fixed
in CVS. You may want to work with
http://nitace.bsd.uchicago.edu:8080/files/share/matplotlib-0.60.3a.tar.gz.
It's not a critical update as the bug is only exposed in the following
combination: 1) image data with extent set, 2) image.origin = 'lower'
and 3) you have changed the axes limits from their defaults. May seem
arcane, but nonetheless, Andrew Straw managed to find it within about
6 minutes of my CVS checkin.
Let me know if this helps,
JDH
#!/usr/bin/env python
"""
An animated image
"""
import sys, time, os, gc
from matplotlib import rcParams
from matplotlib.matlab import *
import gtk
# if hold is on the axes images will accumulate and your performance
# will tank!
rc('axes', hold=False)
class HandleDraws:
 drawing_idle_id = 0
 shape = 100,100 # image size
 cnt = 0
 def __init__(self):
 self.fig = figure(1)
 self.a1 = subplot(211)
 self.a2 = subplot(212)
 
 def idle_update(self, *args):
 'only call a draw if gtk is idle'
 if self.cnt==0: self.tstart = time.time()
 draw()
 self.drawing_idle_id = 0
 self.cnt += 1
 if self.cnt>=50:
 print 'FPS', self.cnt/(time.time() - self.tstart)
 sys.exit()
 
 return False
 def update1(self, data):
 if self.drawing_idle_id == 0:
 self.a1.imshow(data, interpolation='nearest')
 self.drawing_idle_id = gtk.idle_add(self.idle_update)
 else: print 'dropping frame for axes 1'
 def update2(self, data):
 if self.drawing_idle_id == 0:
 self.a2.imshow(data, interpolation='nearest')
 self.drawing_idle_id = gtk.idle_add(self.idle_update)
 else: print 'dropping frame for axes 2'
handler = HandleDraws()
def generate_events(*args):
 data = rand(100,100)
 # randomly pick which axes to update
 if rand()>0.5: handler.update1(data)
 else: handler.update2(data)
 return True
cnt = 0
gtk.timeout_add(10, generate_events)
show()
From: John H. <jdh...@ac...> - 2004年07月15日 12:56:45
>>>>> "Jeff" == Jeff Whitaker <js...@fa...> writes:
 Jeff> I'm pretty sure it's not the data. I only see this when I
 Jeff> use imshow, not pcolor.
OK, I'll get this sorted out. Thanks for letting me know.
 Jeff> Sure. I've reworked the example a bit - now I read in a
 Jeff> regular lat/lon grid from a pickle and use numarray's spline
 Jeff> interpolation function to interpolate to the native
 Jeff> projection grid. Here's the modified example:
It looks very nice. Perry Greenfield has provided a nice framework
with matplotlib.colors.LinearSegmentedColormap to define new
colormaps. You can create new colormaps fairly easy by following the
example of jet in matplotlib.cm. It would be very nice if you could
add some of the common cartographic colormaps. If you do get the time
to do so when working on your mapping code, here are the steps
 * define your rgb linear segments in matplotlib.cm, following the lead
 of the _jet_data dictionary in that module
 * add an entry to the datad dictionary in that module which maps rc
 string names for your color map to the dictionary you just
 defined.
 * instantiate a single instance of your colormap in cm, following
 the example
 
 jet = colors.LinearSegmentedColormap('jet', _jet_data, LUTSIZE)
 * add a matplotlib.matlab function which has the same name as your
 colormap, following the example of matplotlib.matlab.jet.
Now anyone can use the colormap interactively from the shell, by
setting it as the default image.cmap in rc, etc.
JDH
From: John H. <jdh...@ac...> - 2004年07月15日 12:47:34
>>>>> "Charles" == Charles R Twardy <cha...@in...> writes:
 Charles> I can't see the matplotlib package with "apt-get". I
 Charles> have these lines in my sources.list and I've rerun
 Charles> "apt-get update".
 Charles> # Matplotlib deb http://mentors.debian.net/debian
 Charles> unstable main contrib non-free deb-src
 Charles> http://mentors.debian.net/debian unstable main contrib
 Charles> non-free
 Charles> I can see matplotlib-doc, but not matplotlib. Any ideas?
Hi Charles, I think messages about the debian distribution should be
sent to the devel list; I'm not sure Vittorio reads the users list.
I've CCd him on this email.
Cheers,
JDH
From: John H. <jdh...@ac...> - 2004年07月15日 12:36:52
>>>>> "Brett" == Brett Calcott <br...@co...> writes:
 Brett> win32, xp, python 2.3.3 matplotlib: __version__ = '0.60.2'
 Brett> __revision__ = '$Revision: 1.64 $'
 Brett> Any attempt to save ps: savefig('fig.ps')
 Brett> gives this:
 Brett> Fatal Python error: PyEval_RestoreThread: NULL tstate
 Brett> This application has requested the Runtime to terminate it
 Brett> in an unusual way. Please contact the application's
 Brett> support team for more information.
 Brett> The postscript file *is* actually written.
 Brett> What more info do you need to track this?
Bizarre - on virtually the same platform (windows xp, 0.60.2,
enthought python 2.3.3) I can save PS either directly
 > python simple_plot.py -dPS
or from the GUI by clicking save and using a ps or eps extension with
no troubles, warnings or errors.
As for more information: how are you running matplotlib when you try
to save ps (ie from a GUI window, from an IDE, by setting ps as the
backend in rc, interactively from the python shell)? Do you still get
the same error when calling a script from the command shell with -dPS
as above? Which matplotlib windows installer are you using:
 matplotlib-0.60.2-numarray0.9-win32-py2.3.exe
 matplotlib-0.60.2-numarray1.0-win32-py2.3.exe 
 matplotlib-0.60.2.win32-py2.3.exe?
What is your numerix setting in
c:\python23\share\matplotlib\.matplotlibrc, or wherever you keep your
rc file? Do you get this problem when you try to save png with the
agg backend?
After gathering the info above, I suggest removing
c:\python23\lib\site-packages\matplotlib and
c:\python23\share\matplotlib and doing a clean install.
From your message (PyEval_RestoreThread: NULL), I'm guessing you are
running from an IDE (idle?) with the tkagg backend and are getting a
mainloop conflict. Have you read
http://matplotlib.sourceforge.net/faq.html#FREEZE?
Good luck! JDH
From: Charles R. T. <cha...@in...> - 2004年07月15日 04:12:15
I can't see the matplotlib package with "apt-get".
I have these lines in my sources.list and I've rerun "apt-get update".
# Matplotlib
deb http://mentors.debian.net/debian unstable main contrib non-free
deb-src http://mentors.debian.net/debian unstable main contrib non-free
I can see matplotlib-doc, but not matplotlib. Any ideas?
-Charles
-- 
Charles R. Twardy www.csse.monash.edu.au/~ctwardy
Monash University sarbayes.org
Computer Sci. & Software Eng. +61(3) 9905 5823 (w) 5146 (fax)
Allow the president to invade a neighboring nation, whenever he shall
deem it necessary to repel an invasion, ... and you allow him to make
war at pleasure. --Abraham Lincoln
From: Philip A. <pa...@eo...> - 2004年07月15日 03:36:10
Jeff Whitaker writes:
 > When I get some time I'd like to wrap some of this in some
 > easy-to-use functions, maybe with an interface similar to the
 > matlab mapping toolbox.
That would be very nice -- I think the matlab mapping/colorscaling
examples at
http://www.mathworks.com/company/newsletters/digest/nov02/earth_pt4.html
http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectType=file&objectId=2611
represent the vast majority of things that people would want to do
with map/image overlays.
Regards, Phil
From: Jeff W. <js...@fa...> - 2004年07月15日 02:50:47
On 2004年7月14日, John Hunter wrote:
>>>>>> "Jeff" == Jeff Whitaker <js...@fa...> writes:
>
> I noticed that the lat/lon lines don't precisely agree with the
> colormap, eg around the Aleutian Islands the light blue is not
> perfectly registered with the black lines. Should I be concerned that
> this reflects a problem in matplotlib, or is this kind of error
> standard in the data you've provided? I think this is related to the
> pixel border that appears around some images, and is magnified when
> interpolation is used because the top and right borders are not
> defined when interpolating. I'll continue to look into this.
I'm pretty sure it's not the data. I only see this when I use imshow, not 
pcolor.
>
> Would it be OK if I used this example on the web page? I like it!
>
Sure. I've reworked the example a bit - now I read in a regular lat/lon 
grid from a pickle and use numarray's spline interpolation function to 
interpolate to the native projection grid. Here's the modified example:
from matplotlib.matlab import *
from matplotlib.collections import LineCollection 
from proj import Proj
import numarray, cPickle
from numarray import nd_image
# example to demonstrate plotting data on a map projection.
# requires numarray, proj module (which in turn requires 
# proj command from http://proj.maptools.org)
# set up map projection parameters (lambert conformal conic,
# standard parallels at 50 deg N, center longitued 107 deg W.
params = {}
params['proj'] = 'lcc'
params['R'] = 63712000
params['lat_1'] = 50
params['lat_2'] = 50
params['lon_0'] = -107
proj = Proj(params)
llcornerx, llcornery = proj(-145.5,1.)
xmax=11297266.68; ymax=8959901.16
params['x_0'] = -llcornerx # add cartesian offset so lower left corner = (0,0)
params['y_0'] = -llcornery
# create a Proj instance for desired map.
proj = Proj(params)
# define grid (nx x ny regularly spaced native projection grid)
nx = 349; ny = 277 
dx = xmax/(nx-1); dy = ymax/(ny-1)
xgrid = dx*numarray.indices((ny,nx))[1,:,:]
ygrid = dy*numarray.indices((ny,nx))[0,:,:]
# compute lons, lats of regular projection grid.
lonout, latout = proj(xgrid, ygrid, inverse=True)
# make sure lons are between 0 and 360
lonout = numarray.where(lonout < 0, lonout+360, lonout)
latout = latout+90
# read in topo data from pickle (on a regular lat/lon grid)
topodict = cPickle.load(open('etopo20.pickle','rb')) 
lons = topodict['lons']
lats = topodict['lats']
topoin = topodict['topo']
# find coordinates of native projection grid.
xcoords = (len(lons)-1)*(lonout-lons[0])/(lons[-1]-lons[0])
ycoords = (len(lats)-1)*(latout-lats[0])/(lats[-1]-lats[0])
coords = [ycoords,xcoords]
# interpolate to projection grid using numarray.nd_image spline filter.
topodat = numarray.nd_image.map_coordinates(topoin,coords,mode='nearest')
ax = subplot(111) 
# use imshow rather than pcolor for speed 
# set the default params for imshow 
rc('image', origin='lower', cmap='jet') 
im = ax.imshow(topodat, interpolation='nearest',extent=(0, xmax, 0, ymax)) 
#pcolor(xgrid, ygrid, topodat, shading='flat')
# read in coastline data from pickle.
wcl = cPickle.load(open('wcl.pickle','rb'))
ind = wcl['segment_index']; lons = wcl['lons']; lats = wcl['lats']
# transform coastline segements to map projection coordinates. 
xs, ys = proj(lons,lats)
# a sequence of xy tuples 
segments = [zip(xs[i0:i1], ys[i0:i1]) for i0, i1 in zip(ind[:-1], ind[1:])]
# line collection
collection = LineCollection(
 segments,
 colors = ( (0,0,0,1), ), # black
 linewidths = (1.5,),
 antialiaseds = (1,),) # turn off aa for speed
ax.add_collection(collection) 
corners = (min(xs), min(ys)), (max(xs), max(ys)) 
ax.update_datalim( corners ) 
axis([0, xmax, 0, ymax]) 
ax.set_xticks([]) # no ticks 
ax.set_yticks([]) 
title('20-minute Topography: Lambert Conformal Conic Projection') 
show()
I've tarred up all the pickles and scripts to run this at 
http://whitaker.homeunix.org/~jeff/plotmap.tar.gz. The resulting image is 
at http://whitaker.homeunix.org/~jeff/plotmap.png. When I get some time 
I'd like to wrap some of this in some easy-to-use functions, maybe with an 
interface similar to the matlab mapping toolbox.
Thanks for all your help!
-Jeff
 -- 
Jeffrey S. Whitaker Phone : (303)497-6313
NOAA/OAR/CDC R/CDC1 FAX : (303)497-6449
325 Broadway Web : http://www.cdc.noaa.gov/~jsw
Boulder, CO, USA 80305-3328 Office: Skaggs Research Cntr 1D-124
From: Brett C. <br...@co...> - 2004年07月15日 02:34:54
win32, xp, python 2.3.3
matplotlib:
__version__ = '0.60.2'
__revision__ = '$Revision: 1.64 $'
Any attempt to save ps:
savefig('fig.ps')
gives this:
Fatal Python error: PyEval_RestoreThread: NULL tstate
This application has requested the Runtime to terminate it in an unusual 
way.
Please contact the application's support team for more information.
The postscript file *is* actually written.
What more info do you need to track this?
-- 
Brett Calcott
Philosophy Program, RSSS, ANU
Canberra, ACT 0200, AUSTRALIA
From: Kenneth M. <ken...@sb...> - 2004年07月15日 00:35:12
The easiest way to describe this is to repeat the info that's been
posted into the "macpython" mailing list--sorry if you've already
seen it. According to one of the people who helped me on the
macpython list, the problem I'm having is
likely caused by matplotlib using a custom method of finding
Tcl/Tk headers, rather than by a Python/OS X interaction problem,
which is why I'm bringing the topic over to this list.
Many thanks for any help you can offer!
Here's what has gone before, consisting of questions from me and
answers from other people. I've done some editing to shorten things up.
>>>> I'm attempting to compile matplotlib, and get messages saying that
>>>> it can't find the headers for Tcl/Tk. They exist, they just happen 
>>>> to
>>>> be in the Frameworks directories for Tcl and for Tk. I know I can
>>>> get this to work by hacking (setting up path variables, putting 
>>>> symbolic
>>>> links in directories, or some such), but aside from the fact that 
>>>> that's
>>>> a pain and ugly, it doesn't solve the more general problem; if 
>>>> header
>>>> files are supposed to be in Frameworks directories (for example, I
>>>> found my Tk header files in 
>>>> /Library/Frameworks/Tk.framework/Headers),
>>>> what is the best way to set up OS X so that they will be available 
>>>> to link
>>>> against?
>>> Short answer: Whatever you're trying to build is (incorrectly) not 
>>> using tclConfig.sh (they should allow the user to choose which one, 
>>> but should default to /usr/lib/tclConfig.sh I guess). This is 
>>> equivalent to not using distutils. It probably won't be a problem 
>>> in the Mac OS X future however, because...
>>>
>>> Apple's latest strategy for unixy stuff (at least for Python) seems 
>>> to be a hybrid approach that should please almost anyone:
>>> 	(1) the actual dylib lives in /usr/lib and has a mach-o id pointing 
>>> to /usr/lib
>>> 	(2) the framework has symlinks to /usr/lib for its dylib
>>> 	(3) the headers live in the framework
>>> 	(4) /usr/include has appropriate symlinks into the framework
>>>
>>> [I can say this without breaking NDA because Apple has publicly 
>>> released their sources for Python in Darwin 8.0.0b1]
>>
>> After reading Bob's message, I looked into /usr/lib and found that 
>> while
>> it contained a tclConfig.sh, there was no tkConfig.sh. A search of the
>> file system revealed a tkConfig.sh in 
>> /Library/Framewords/Tk.framework, so
>> I copied it there.
>>
>> While I suspect this was a Good Thing To Do, it still hasn't solved
>> the problem of matplotlib's setup.py not being able to find the tcl/tk
>> headers. Here's my attempt at building and the resultant message:
>>
>> 	ken% python setup.py build
>> 	GTKAgg requires pygtk
>> 	cannot find tcl/tk headers. giving up.
>>
>> The message about "GTKAgg" is expected and should be ignored. 
>> Attempting
>> a "python setup.py -v build" gave exactly the same error messages. 
>> Unfortunately
>> the error message about the header, while to the point, isn't 
>> terribly helpful :-)
>>
>> matplotlib is packaged using distutil, and presumably distutil isn't 
>> getting
>> the info it needs to figure out where the headers are. I've started 
>> reading
>> about distutil, but am a novice at it (and it's a fairly involved 
>> package, as
>> well), so if others could offer suggestions as to how to track 
>> down/fix this
>> problem, it would be a real help.
>>
> distutils is only good at finding Python's compiler/linker settings 
> and Python's headers.
> matplotlib has custom code to find Tcl/Tk in its setup.py, and that 
> custom code is not doing the right thing.
2 messages has been excluded from this view by a project administrator.

Showing 11 results of 11

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /