Scatter Plot with different colors

Hi,

I'm trying to make a scatter plot of 2 variables using a thirds as filter to
have different colors.

Let's say I have those data:

x=1,2,3,4
y=2,3,4,5
z=0,1,0,1

Then I want the values of x and y corresponding to those of z=0 to be of a
color and those corresponding to z=1 to be of another color.

This is the code I manage to do until know:

import xlrd
import numpy as np
import matplotlib.pyplot as plt

wb = xlrd.open_workbook('GBL2009.xls')
sh = wb.sheet_by_index(0)

def column_pos():
    first_row=sh.row_values(0)
    net_p=""
    for i in first_row:
        if i=='net_price':
            net_p=first_row.index(i) #In gets the column position
    for i in first_row:
        if i=='material':
            mat_p=first_row.index(i) #In gets the column position
    for i in first_row:
        if i=='qty':
            qty_p=first_row.index(i) #In gets the column position
    print net_p, mat_p, qty_p
    #filtering(net_p, mat_p, qty_p)
    test(net_p, mat_p, qty_p)
    
def test(net_p, mat_p, qty_p):
    list=[]
    for rownum in range(sh.nrows):
        if sh.cell(rownum,mat_p).value in (96433890, 96433886):
            list.append(sh.row_values(rownum))

    x=[]
    y=[]
    z=[]
    for i in list:
        x.append(i[qty_p])
        y.append(i[net_p])
        z.append(i[mat_p])

    fig = plt.figure(1, figsize=(5.5,5.5))
    axScatter = plt.subplot(111)

    colors = ('r', 'g', 'b', 'k')
    for c in colors:
        axScatter.scatter(x, y, c=c, marker='s')

    plt.show()

···

--
View this message in context: http://old.nabble.com/Scatter-Plot-with-different-colors-tp29887701p29887701.html
Sent from the matplotlib - users mailing list archive at Nabble.com.

So, what is your problem?
If you want to post a code, please post a complete (but simple!) code.

If you want to map values of z to colors, a simple solution would be
to use dict.

z = [0,1,0,1]
color_map = {0:"r", 1:"g"}
z_as_colors = map(color_map.get, z)

scatter supports colormap but it may not very useful for your case.

Regards,

-JJ

···

On Tue, Oct 5, 2010 at 11:07 PM, Alessio Civ <viandante68@...287...> wrote:

Hi,

I'm trying to make a scatter plot of 2 variables using a thirds as filter to
have different colors.

Let's say I have those data:

x=1,2,3,4
y=2,3,4,5
z=0,1,0,1

Then I want the values of x and y corresponding to those of z=0 to be of a
color and those corresponding to z=1 to be of another color.

This is the code I manage to do until know:

import xlrd
import numpy as np
import matplotlib.pyplot as plt

wb = xlrd.open_workbook('GBL2009.xls')
sh = wb.sheet_by_index(0)

def column_pos():
first_row=sh.row_values(0)
net_p=""
for i in first_row:
if i=='net_price':
net_p=first_row.index(i) #In gets the column position
for i in first_row:
if i=='material':
mat_p=first_row.index(i) #In gets the column position
for i in first_row:
if i=='qty':
qty_p=first_row.index(i) #In gets the column position
print net_p, mat_p, qty_p
#filtering(net_p, mat_p, qty_p)
test(net_p, mat_p, qty_p)

def test(net_p, mat_p, qty_p):
list=[]
for rownum in range(sh.nrows):
if sh.cell(rownum,mat_p).value in (96433890, 96433886):
list.append(sh.row_values(rownum))

x=[]
y=[]
z=[]
for i in list:
x.append(i[qty_p])
y.append(i[net_p])
z.append(i[mat_p])

fig = plt.figure(1, figsize=(5.5,5.5))
axScatter = plt.subplot(111)

colors = ('r', 'g', 'b', 'k')
for c in colors:
axScatter.scatter(x, y, c=c, marker='s')

plt.show()

Please, can someone help me? I've been digging the documentation, but I
can't find a way to do this.

Alessio Civ wrote:

···

Hi,

I'm trying to make a scatter plot of 2 variables using a thirds as filter
to have different colors.

Let's say I have those data:

x=1,2,3,4
y=2,3,4,5
z=0,1,0,1

Then I want the values of x and y corresponding to those of z=0 to be of a
color and those corresponding to z=1 to be of another color.

This is the code I manage to do until know:

import xlrd
import numpy as np
import matplotlib.pyplot as plt

wb = xlrd.open_workbook('GBL2009.xls')
sh = wb.sheet_by_index(0)

def column_pos():
    first_row=sh.row_values(0)
    net_p=""
    for i in first_row:
        if i=='net_price':
            net_p=first_row.index(i) #In gets the column position
    for i in first_row:
        if i=='material':
            mat_p=first_row.index(i) #In gets the column position
    for i in first_row:
        if i=='qty':
            qty_p=first_row.index(i) #In gets the column position
    print net_p, mat_p, qty_p
    #filtering(net_p, mat_p, qty_p)
    test(net_p, mat_p, qty_p)
    
def test(net_p, mat_p, qty_p):
    list=[]
    for rownum in range(sh.nrows):
        if sh.cell(rownum,mat_p).value in (96433890, 96433886):
            list.append(sh.row_values(rownum))

    x=[]
    y=[]
    z=[]
    for i in list:
        x.append(i[qty_p])
        y.append(i[net_p])
        z.append(i[mat_p])

    fig = plt.figure(1, figsize=(5.5,5.5))
    axScatter = plt.subplot(111)

    colors = ('r', 'g', 'b', 'k')
    for c in colors:
        axScatter.scatter(x, y, c=c, marker='s')

    plt.show()

--
View this message in context: http://old.nabble.com/Scatter-Plot-with-different-colors-tp29887701p29926014.html
Sent from the matplotlib - users mailing list archive at Nabble.com.

2010/10/10 Alessio Civ <viandante68@...287...>:

Please, can someone help me? I've been digging the documentation, but I
can't find a way to do this.

¿Didn't you get my message on oct-5? I didn't send it to the list by mistake:

--%<----------------------------------------------------------------------------
Make your variables numpy arrays and slice them using values in z:

x = np.array([1, 2, 3, 4])
y = np.array([2, 3, 4, 5])
z = np.array([0, 1, 0, 1])

x0 = x[z == 0]
y0 = y[z == 1]
x1 = x[z == 0]
y1 = y[z == 1]

plt.scatter(x0, y0, c='b')
plt.scatter(x1, y1, c='r')

--%<------------------------------------------------------------------------

See the attached example, you can run it as a script or import it as a
module and use the function multi_scatter in your code.

Goyo

multi_scatter.py (671 Bytes)

Hi,

thanks for reply.

My problem is that I need to scatter data of different periods but in the
same x.

For example, the quantity x sold in March is 1 at price y of 2, the quantity
sold in April is 2 at price y of 3. I want the 2 points to have different
colors in the same graph!

Now I'm doing:

    for i in list:
        x.append(i[0])
        y.append(i[1])

axScatter.scatter(x, y, c='r', marker='s')

This makes al the points red! I want to be able to put points of different
colors for different periods of time. Basically, I want to know how to
define a function in order to change the color of the points for specific
definitions.

Jae-Joon Lee wrote:

···

On Tue, Oct 5, 2010 at 11:07 PM, Alessio Civ <viandante68@...287...> > wrote:

Hi,

I'm trying to make a scatter plot of 2 variables using a thirds as filter
to
have different colors.

Let's say I have those data:

x=1,2,3,4
y=2,3,4,5
z=0,1,0,1

Then I want the values of x and y corresponding to those of z=0 to be of
a
color and those corresponding to z=1 to be of another color.

This is the code I manage to do until know:

import xlrd
import numpy as np
import matplotlib.pyplot as plt

wb = xlrd.open_workbook('GBL2009.xls')
sh = wb.sheet_by_index(0)

def column_pos():
first_row=sh.row_values(0)
net_p=""
for i in first_row:
if i=='net_price':
net_p=first_row.index(i) #In gets the column position
for i in first_row:
if i=='material':
mat_p=first_row.index(i) #In gets the column position
for i in first_row:
if i=='qty':
qty_p=first_row.index(i) #In gets the column position
print net_p, mat_p, qty_p
#filtering(net_p, mat_p, qty_p)
test(net_p, mat_p, qty_p)

def test(net_p, mat_p, qty_p):
list=[]
for rownum in range(sh.nrows):
if sh.cell(rownum,mat_p).value in (96433890, 96433886):
list.append(sh.row_values(rownum))

x=[]
y=[]
z=[]
for i in list:
x.append(i[qty_p])
y.append(i[net_p])
z.append(i[mat_p])

fig = plt.figure(1, figsize=(5.5,5.5))
axScatter = plt.subplot(111)

colors = ('r', 'g', 'b', 'k')
for c in colors:
axScatter.scatter(x, y, c=c, marker='s')

plt.show()

So, what is your problem?
If you want to post a code, please post a complete (but simple!) code.

If you want to map values of z to colors, a simple solution would be
to use dict.

z = [0,1,0,1]
color_map = {0:"r", 1:"g"}
z_as_colors = map(color_map.get, z)

scatter supports colormap but it may not very useful for your case.

Regards,

-JJ

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--
View this message in context: http://old.nabble.com/Scatter-Plot-with-different-colors-tp29887701p29928970.html
Sent from the matplotlib - users mailing list archive at Nabble.com.

Thanks Goyo and Jae-Joon Lee.

It worked!

it worked!

Goyo wrote:

···

2010/10/10 Alessio Civ <viandante68@...287...>:

Please, can someone help me? I've been digging the documentation, but I
can't find a way to do this.

¿Didn't you get my message on oct-5? I didn't send it to the list by
mistake:

--%<----------------------------------------------------------------------------
Make your variables numpy arrays and slice them using values in z:

x = np.array([1, 2, 3, 4])
y = np.array([2, 3, 4, 5])
z = np.array([0, 1, 0, 1])

x0 = x[z == 0]
y0 = y[z == 1]
x1 = x[z == 0]
y1 = y[z == 1]

plt.scatter(x0, y0, c='b')
plt.scatter(x1, y1, c='r')

--%<------------------------------------------------------------------------

See the attached example, you can run it as a script or import it as a
module and use the function multi_scatter in your code.

Goyo

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--
View this message in context: http://old.nabble.com/Scatter-Plot-with-different-colors-tp29887701p29931461.html
Sent from the matplotlib - users mailing list archive at Nabble.com.