[mplot3d] change axis background color

Hi,

Is there a way to change (and maybe remove) the background color (gray
by default) of axis in mplot3d graphics ?

Thanks,

  Denis

Denis,

There are probably other ways, but the one that I know off the top of my head is done at the savefig() function. If you want to remove the background entirely, you can specify the keyword argument transparent=True. You can change the color using the facecolor keyword argument. You can specify any color in that argument like you would elsewhere in matplotlib.

Ben Root

···

On Tue, Jun 1, 2010 at 4:42 PM, Denis Laxalde <dlaxalde@…287…> wrote:

Hi,

Is there a way to change (and maybe remove) the background color (gray

by default) of axis in mplot3d graphics ?

Thanks,

Denis



Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Hi Ben,

Thanks for your answer.
Actually, options for savefig seem to only operate on 2D axes whereas
I'm trying to change the color of 3D axes (x,y,z) which, by default,
have a grid with a gray background.
I manage to remove the grid lines but not the background color.
(My initial question was not very clear perhaps...)

    Denis

···

Le mardi 01 juin 2010 à 16:57 -0500, Benjamin Root a écrit :

Denis,

There are probably other ways, but the one that I know off the top of my
head is done at the savefig() function. If you want to remove the
background entirely, you can specify the keyword argument transparent=True.
You can change the color using the facecolor keyword argument. You can
specify any color in that argument like you would elsewhere in matplotlib.

Ben Root

On Tue, Jun 1, 2010 at 4:42 PM, Denis Laxalde <dlaxalde@...287...> wrote:

> Hi,
>
> Is there a way to change (and maybe remove) the background color (gray
> by default) of axis in mplot3d graphics ?
>
> Thanks,
>
> Denis
>

Sorry for the newbie question, how do you plot one x with multiple ys. In below data, x column is followed by 5 y columns:
Many thanks!
Howard

2 1.0000e+00 6.6232e-02 9.9392e-03 2.2992e-02 3.8111e-07
3 6.3664e-01 1.0269e-01 7.9107e-03 1.8254e-02 1.1391e-07
4 2.7590e-01 4.9783e-02 6.2644e-03 1.0943e-02 5.8480e-08
5 1.6550e-01 2.3269e-02 4.7482e-03 8.4312e-03 5.8239e-08
6 1.1590e-01 1.7234e-02 3.8567e-03 8.7010e-03 4.5506e-08
7 7.4337e-02 1.1662e-02 3.3756e-03 8.0889e-03 4.0900e-08
8 5.7775e-02 1.0917e-02 2.8980e-03 6.9654e-03 3.7520e-08
9 4.7310e-02 1.1869e-02 2.5929e-03 5.8326e-03 3.4745e-08
10 3.9591e-02 1.1301e-02 2.4691e-03 5.2749e-03 3.2126e-08
11 3.6517e-02 1.0755e-02 2.3121e-03 4.8631e-03 3.7942e-08
12 3.2872e-02 9.8306e-03 2.1692e-03 4.6281e-03 3.2358e-08
13 3.1235e-02 9.1704e-03 2.0419e-03 4.3928e-03 3.1479e-08
14 2.9528e-02 8.6926e-03 1.9364e-03 4.1360e-03 3.5639e-08
15 2.7895e-02 8.3080e-03 1.8475e-03 3.9015e-03 3.0486e-08
16 2.6440e-02 7.9610e-03 1.7776e-03 3.6790e-03 3.0307e-08
17 2.5259e-02 7.6345e-03 1.6984e-03 3.4743e-03 3.1805e-08
18 2.4064e-02 7.3267e-03 1.6341e-03 3.2848e-03 3.0188e-08
19 2.3171e-02 7.0284e-03 1.5821e-03 3.1098e-03 2.7565e-08
20 2.2317e-02 6.7322e-03 1.5247e-03 2.9475e-03 2.7009e-08

···

-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

Matplotlib has excellent documentation:
http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.plot

hth,
Alan Isaac

···

On 6/1/2010 7:05 PM, Howard Sun wrote:

Sorry for the newbie question, how do you plot one x with multiple ys. In below data, x column is followed by 5 y columns

You can make an x vector and a y array, so that the first dimension of y is the same length as x:

import numpy as np

import matplotlib.pyplot as plt

x = np.arange(2,21)

y = np.random.random(size=(19,5)) + np.arange(5)[None,:]

plt.plot(x,y)

Angus.

···

On 1 June 2010 19:05, Howard Sun <hsun@…3134…> wrote:

Sorry for the newbie question, how do you plot one x with multiple ys. In below data, x column is followed by 5 y columns:

Many thanks!


AJC McMorland
Post-doctoral research fellow
Neurobiology, University of Pittsburgh

Howard Sun <hsun@...3134...>

Sorry for the newbie question, how do you plot one x with multiple ys. In
below data, x column is followed by 5 y columns: Many thanks!
Howard

2 1.0000e+00 6.6232e-02 9.9392e-03 2.2992e-02 3.8111e-07
3 6.3664e-01 1.0269e-01 7.9107e-03 1.8254e-02 1.1391e-07
4 2.7590e-01 4.9783e-02 6.2644e-03 1.0943e-02 5.8480e-08
5 1.6550e-01 2.3269e-02 4.7482e-03 8.4312e-03 5.8239e-08
6 1.1590e-01 1.7234e-02 3.8567e-03 8.7010e-03 4.5506e-08
7 7.4337e-02 1.1662e-02 3.3756e-03 8.0889e-03 4.0900e-08
8 5.7775e-02 1.0917e-02 2.8980e-03 6.9654e-03 3.7520e-08
9 4.7310e-02 1.1869e-02 2.5929e-03 5.8326e-03 3.4745e-08
10 3.9591e-02 1.1301e-02 2.4691e-03 5.2749e-03 3.2126e-08
11 3.6517e-02 1.0755e-02 2.3121e-03 4.8631e-03 3.7942e-08
12 3.2872e-02 9.8306e-03 2.1692e-03 4.6281e-03 3.2358e-08
13 3.1235e-02 9.1704e-03 2.0419e-03 4.3928e-03 3.1479e-08
14 2.9528e-02 8.6926e-03 1.9364e-03 4.1360e-03 3.5639e-08
15 2.7895e-02 8.3080e-03 1.8475e-03 3.9015e-03 3.0486e-08
16 2.6440e-02 7.9610e-03 1.7776e-03 3.6790e-03 3.0307e-08
17 2.5259e-02 7.6345e-03 1.6984e-03 3.4743e-03 3.1805e-08
18 2.4064e-02 7.3267e-03 1.6341e-03 3.2848e-03 3.0188e-08
19 2.3171e-02 7.0284e-03 1.5821e-03 3.1098e-03 2.7565e-08
20 2.2317e-02 6.7322e-03 1.5247e-03 2.9475e-03 2.7009e-08

First, you take the data apart, like in:

import csv, numpy

# let's call your array "filecopy"

d = csv.Sniffer().sniff(filecopy[0])

for this_one_line in csv.reader(filecopy, d):
        header = this_one_line
        break

data = numpy.zeros((len(header), len(filecopy)))

for line in csv.reader(filecopy[1:], d):
        for n in range(len(header)):
            data[n][linecounter] = float(line[n])
        linecounter += 1

And then, you plot it:

from matplotlib import pyplot

fig = pyplot.figure()
s = fig.add_subplot(1, 1, 1)
for c in data:
        s.plot(data[0], c)

pyplot.show()

Obviously, that's all taken from another script and won't work "as is" and
there might be functions which would make some of this easier.

The main reason for posting this is being that bad that someone couldn't take
the pain and post something better - and me learning in the process.

Sincerely,

Malte

Howard,

Are you trying to plot 4 lines with the same y-axis or with two or more y-axes? I only ask because the values of your 5th column are many orders of magnitude smaller than the values of the other ys.

If you want multiple y-axes on the same plot, then you might want to look at Parasite Axes. If not, then you can very simply plot this like so (assuming that ‘data’ is a 2-D numpy array).

import matplotlib.pyplot as plt

plt.plot(data[:, 0], data[:, 1])
plt.plot(data[:, 0], data[:, 2])
plt.plot(data[:, 0], data[:, 3])
plt.plot(data[:, 0], data[:, 4])

plt.show()

I am sure that my 4 plot statements can be simplified, but I can’t verify that right now.

I hope that helps.

Ben Root

···

On Tue, Jun 1, 2010 at 6:05 PM, Howard Sun <hsun@…3134…> wrote:

Sorry for the newbie question, how do you plot one x with multiple ys. In below data, x column is followed by 5 y columns:

Many thanks!

Howard

2 1.0000e+00 6.6232e-02 9.9392e-03 2.2992e-02 3.8111e-07

3 6.3664e-01 1.0269e-01 7.9107e-03 1.8254e-02 1.1391e-07

4 2.7590e-01 4.9783e-02 6.2644e-03 1.0943e-02 5.8480e-08

5 1.6550e-01 2.3269e-02 4.7482e-03 8.4312e-03 5.8239e-08

6 1.1590e-01 1.7234e-02 3.8567e-03 8.7010e-03 4.5506e-08

7 7.4337e-02 1.1662e-02 3.3756e-03 8.0889e-03 4.0900e-08

8 5.7775e-02 1.0917e-02 2.8980e-03 6.9654e-03 3.7520e-08

9 4.7310e-02 1.1869e-02 2.5929e-03 5.8326e-03 3.4745e-08

10 3.9591e-02 1.1301e-02 2.4691e-03 5.2749e-03 3.2126e-08

11 3.6517e-02 1.0755e-02 2.3121e-03 4.8631e-03 3.7942e-08

12 3.2872e-02 9.8306e-03 2.1692e-03 4.6281e-03 3.2358e-08

13 3.1235e-02 9.1704e-03 2.0419e-03 4.3928e-03 3.1479e-08

14 2.9528e-02 8.6926e-03 1.9364e-03 4.1360e-03 3.5639e-08

15 2.7895e-02 8.3080e-03 1.8475e-03 3.9015e-03 3.0486e-08

16 2.6440e-02 7.9610e-03 1.7776e-03 3.6790e-03 3.0307e-08

17 2.5259e-02 7.6345e-03 1.6984e-03 3.4743e-03 3.1805e-08

18 2.4064e-02 7.3267e-03 1.6341e-03 3.2848e-03 3.0188e-08

19 2.3171e-02 7.0284e-03 1.5821e-03 3.1098e-03 2.7565e-08

20 2.2317e-02 6.7322e-03 1.5247e-03 2.9475e-03 2.7009e-08


This email message is for the sole use of the intended recipient(s) and may contain

confidential information. Any unauthorized review, use, disclosure or distribution

is prohibited. If you are not the intended recipient, please contact the sender by

reply email and destroy all copies of the original message.




Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Howard,

Are you trying to plot 4 lines with the same y-axis or with two or more
y-axes? I only ask because the values of your 5th column are many
orders of magnitude smaller than the values of the other ys.

If you want multiple y-axes on the same plot, then you might want to
look at Parasite Axes. If not, then you can very simply plot this like
so (assuming that 'data' is a 2-D numpy array).

import matplotlib.pyplot as plt

plt.plot(data[:, 0], data[:, 1])
plt.plot(data[:, 0], data[:, 2])
plt.plot(data[:, 0], data[:, 3])
plt.plot(data[:, 0], data[:, 4])

plt.show()

I am sure that my 4 plot statements can be simplified, but I can't
verify that right now.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(2, 5, 0.3)
y = np.random.randn(len(x), 4) # dummy data for illustration
plt.plot(x, y)

So with the data array as above, it would be

plt.plot(data[:,0], data[:, 1:])

Eric

···

On 06/01/2010 02:47 PM, Benjamin Root wrote:

I hope that helps.

Ben Root

Malte,

You may want to look into Numpy’s genfromtxt() or loadtxt() functions. They will make your life so much easier for loading data from a text file.

Ben Root

···

On Tue, Jun 1, 2010 at 6:47 PM, Malte Dik <malte.dik@…273…> wrote:

Howard Sun <hsun@…3134…>

Sorry for the newbie question, how do you plot one x with multiple ys. In

below data, x column is followed by 5 y columns: Many thanks!

Howard

2 1.0000e+00 6.6232e-02 9.9392e-03 2.2992e-02 3.8111e-07

3 6.3664e-01 1.0269e-01 7.9107e-03 1.8254e-02 1.1391e-07

4 2.7590e-01 4.9783e-02 6.2644e-03 1.0943e-02 5.8480e-08

5 1.6550e-01 2.3269e-02 4.7482e-03 8.4312e-03 5.8239e-08

6 1.1590e-01 1.7234e-02 3.8567e-03 8.7010e-03 4.5506e-08

7 7.4337e-02 1.1662e-02 3.3756e-03 8.0889e-03 4.0900e-08

8 5.7775e-02 1.0917e-02 2.8980e-03 6.9654e-03 3.7520e-08

9 4.7310e-02 1.1869e-02 2.5929e-03 5.8326e-03 3.4745e-08

10 3.9591e-02 1.1301e-02 2.4691e-03 5.2749e-03 3.2126e-08

11 3.6517e-02 1.0755e-02 2.3121e-03 4.8631e-03 3.7942e-08

12 3.2872e-02 9.8306e-03 2.1692e-03 4.6281e-03 3.2358e-08

13 3.1235e-02 9.1704e-03 2.0419e-03 4.3928e-03 3.1479e-08

14 2.9528e-02 8.6926e-03 1.9364e-03 4.1360e-03 3.5639e-08

15 2.7895e-02 8.3080e-03 1.8475e-03 3.9015e-03 3.0486e-08

16 2.6440e-02 7.9610e-03 1.7776e-03 3.6790e-03 3.0307e-08

17 2.5259e-02 7.6345e-03 1.6984e-03 3.4743e-03 3.1805e-08

18 2.4064e-02 7.3267e-03 1.6341e-03 3.2848e-03 3.0188e-08

19 2.3171e-02 7.0284e-03 1.5821e-03 3.1098e-03 2.7565e-08

20 2.2317e-02 6.7322e-03 1.5247e-03 2.9475e-03 2.7009e-08

First, you take the data apart, like in:

import csv, numpy

let’s call your array “filecopy”

d = csv.Sniffer().sniff(filecopy[0])

for this_one_line in csv.reader(filecopy, d):

    header = this_one_line

    break

data = numpy.zeros((len(header), len(filecopy)))

for line in csv.reader(filecopy[1:], d):

    for n in range(len(header)):

        data[n][linecounter] = float(line[n])

    linecounter += 1

Huh, how about that? I never noticed that before. I wonder if that is a bug or if it is intentional?

Ben Root

···

On Tue, Jun 1, 2010 at 5:28 PM, Denis Laxalde <dlaxalde@…287…> wrote:

Hi Ben,

Thanks for your answer.

Actually, options for savefig seem to only operate on 2D axes whereas

I’m trying to change the color of 3D axes (x,y,z) which, by default,

have a grid with a gray background.

I manage to remove the grid lines but not the background color.

(My initial question was not very clear perhaps…)

Denis

Le mardi 01 juin 2010 à 16:57 -0500, Benjamin Root a écrit :

Denis,

There are probably other ways, but the one that I know off the top of my

head is done at the savefig() function. If you want to remove the

background entirely, you can specify the keyword argument transparent=True.

You can change the color using the facecolor keyword argument. You can

specify any color in that argument like you would elsewhere in matplotlib.

Ben Root

On Tue, Jun 1, 2010 at 4:42 PM, Denis Laxalde <dlaxalde@…287…> wrote:

Hi,

Is there a way to change (and maybe remove) the background color (gray

by default) of axis in mplot3d graphics ?

Thanks,

Denis

Thanks alot, Alan, Angus, Ben, Eric and Malte, for the tips and the varieties. Matplotlib is awesome!

Howard Sun, Ph.D.
NVIDIA CORP.
2701 San Tomas Expressway
Santa Clara, CA 95050
T (408) 566-5036
F (408) 486-8207

···

-----Original Message-----
From: Eric Firing [mailto:efiring@…202…]
Sent: Tuesday, June 01, 2010 7:07 PM
To: matplotlib-users@lists.sourceforge.net
Subject: Re: [Matplotlib-users] multiple lines

On 06/01/2010 02:47 PM, Benjamin Root wrote:

Howard,

Are you trying to plot 4 lines with the same y-axis or with two or more
y-axes? I only ask because the values of your 5th column are many
orders of magnitude smaller than the values of the other ys.

If you want multiple y-axes on the same plot, then you might want to
look at Parasite Axes. If not, then you can very simply plot this like
so (assuming that 'data' is a 2-D numpy array).

import matplotlib.pyplot as plt

plt.plot(data[:, 0], data[:, 1])
plt.plot(data[:, 0], data[:, 2])
plt.plot(data[:, 0], data[:, 3])
plt.plot(data[:, 0], data[:, 4])

plt.show()

I am sure that my 4 plot statements can be simplified, but I can't
verify that right now.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(2, 5, 0.3)
y = np.random.randn(len(x), 4) # dummy data for illustration
plt.plot(x, y)

So with the data array as above, it would be

plt.plot(data[:,0], data[:, 1:])

Eric

I hope that helps.

Ben Root

------------------------------------------------------------------------------

_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users
-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may contain
confidential information. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact the sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------

Thanks all for the help again, after a bit trial-n-error, this
is what I did, (only 4 lines of code):

x5y = np.loadtxt(fp)

x,y = x5y[:, 0], x5y[:, 1:5]

#plt.plot(x, y)

plt.semilogy(x, y)

plt.show()

and the plot. Btw, I am not a SW guy as you probably can tell,
but a CFD (computational Fluid Dynamics) guy who happens to write code. The plot
is a convergence history plot of an iterative algorithm.

image001.png

···

From: Benjamin Root
[mailto:ben.root@…1304…]
Sent: Tuesday, June 01, 2010 7:24 PM
To: Malte Dik
Cc: matplotlib-users@lists.sourceforge.net
Subject: Re: [Matplotlib-users] multiple lines

Malte,

You may want to look into Numpy’s genfromtxt() or loadtxt() functions.
They will make your life so much easier for loading data from a text file.

Ben Root

On Tue, Jun 1, 2010 at 6:47 PM, Malte Dik <malte.dik@…273…> wrote:

Howard Sun <hsun@…3134…>

Sorry for the newbie
question, how do you plot one x with multiple ys. In
below data, x column is followed by 5 y columns: Many thanks!
Howard

2 1.0000e+00 6.6232e-02 9.9392e-03 2.2992e-02 3.8111e-07
3 6.3664e-01 1.0269e-01 7.9107e-03 1.8254e-02 1.1391e-07
4 2.7590e-01 4.9783e-02 6.2644e-03 1.0943e-02 5.8480e-08
5 1.6550e-01 2.3269e-02 4.7482e-03 8.4312e-03 5.8239e-08
6 1.1590e-01 1.7234e-02 3.8567e-03 8.7010e-03 4.5506e-08
7 7.4337e-02 1.1662e-02 3.3756e-03 8.0889e-03 4.0900e-08
8 5.7775e-02 1.0917e-02 2.8980e-03 6.9654e-03 3.7520e-08
9 4.7310e-02 1.1869e-02 2.5929e-03 5.8326e-03 3.4745e-08
10 3.9591e-02 1.1301e-02 2.4691e-03 5.2749e-03 3.2126e-08
11 3.6517e-02 1.0755e-02 2.3121e-03 4.8631e-03 3.7942e-08
12 3.2872e-02 9.8306e-03 2.1692e-03 4.6281e-03 3.2358e-08
13 3.1235e-02 9.1704e-03 2.0419e-03 4.3928e-03 3.1479e-08
14 2.9528e-02 8.6926e-03 1.9364e-03 4.1360e-03 3.5639e-08
15 2.7895e-02 8.3080e-03 1.8475e-03 3.9015e-03 3.0486e-08
16 2.6440e-02 7.9610e-03 1.7776e-03 3.6790e-03 3.0307e-08
17 2.5259e-02 7.6345e-03 1.6984e-03 3.4743e-03 3.1805e-08
18 2.4064e-02 7.3267e-03 1.6341e-03 3.2848e-03 3.0188e-08
19 2.3171e-02 7.0284e-03 1.5821e-03 3.1098e-03 2.7565e-08
20 2.2317e-02 6.7322e-03 1.5247e-03 2.9475e-03 2.7009e-08

First, you take the data apart,
like in:

import csv, numpy

let’s call your array “filecopy”

d = csv.Sniffer().sniff(filecopy[0])

for this_one_line in csv.reader(filecopy, d):
header = this_one_line
break

data = numpy.zeros((len(header), len(filecopy)))

for line in csv.reader(filecopy[1:], d):
for n in range(len(header)):
data[n][linecounter] = float(line[n])
linecounter += 1


This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message.