Inform´
atica para Ciˆencias e Engenharias
Ficha Pr´
atica N
o6 — 2020/21
1
Gr´
aficos de Pontos, de Linhas, de Imagens e de Barras
Para garantir que os gr´aficos gerados sejam apresentados em janelas de gr´afico independentes proceder da forma: no menu principal ir a Tools → Preferences e escolher a op¸c˜ao IPython console na janela `a esquerda; no painel Graphics ir `a op¸c˜ao Graphics backend e selecionar Automatic.
Exerc´ıcio 1
Recorde a fun¸c˜ao plot do m´odulo matplotlib, que permite tra¸car um gr´afico de pontos ou linhas1.
(a) Execute no interpretador a sequˆencia de instru¸c˜oes indicada abaixo, que gera um gr´afico de pontos das fun¸c˜oes seno e coseno.
import math
import matplotlib.pyplot as plt
# Fun¸c~ao auxiliar. def multpi(x):
return x * math.pi/30
pontosP = [multpi(x) for x in range(61)] senoP = [math.sin(x) for x in pontosP] plt.plot(pontosP, senoP, ’xb’)
cosenoP = [math.cos(x) for x in pontosP] plt.plot(pontosP, cosenoP, ’or’)
(b) Execute no interpretador a sequˆencia de instru¸c˜oes que gera o gr´afico de linhas correspondente ao gr´afico de pontos que desenhou na al´ınea anterior.
1Chama-se a aten¸c˜ao para a vers˜ao que usar do matplotlib. Na mais recente 3.0 o atributo hold foi descontinuado
e os desenhos dos gr´aficos por defini¸c˜ao sobrep˜oem-se na mesma janela, a menos que sejam apagados. Nas vers˜oes anteriores ter´a de usar o atributo hold tal como se encontra na sequˆencia de instru¸c˜oes apresentada.
0
1
2
3
4
5
6
1.00
0.75
0.50
0.25
0.00
0.25
0.50
0.75
1.00
0
1
2
3
4
5
6
1.00
0.75
0.50
0.25
0.00
0.25
0.50
0.75
1.00
Exerc´ıcio 2Recorde a instru¸c˜ao imshow do m´odulo matplotlib, a qual permite visualizar graficamente o conte´udo de uma matriz tendo ainda a op¸c˜ao de definir a paleta (mapa) de cores usadas na gera¸c˜ao da imagem.
(a) Execute no interpretador a sequˆencia de instru¸c˜oes indicada abaixo, que ilustra a utiliza¸c˜ao da instru¸c˜ao imshow e defini¸c˜ao da paleta de cores com uma lista de 2 × 2, que ser´a pintada sucessivamente com v´arias cores. O m´odulo matplotlib permite gerar um objecto Colormap a partir de uma lista de cores, atrav´es da classe matplotlib.colors.ListedColormap(lista de cores)
from matplotlib.colors import ListedColormap plt.imshow([[1, 2] , [3, 3]])
#cores= vermelho, verde, azul e branco.
cores = [[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 1, 1]] my_cmap = ListedColormap(cores)
plt.figure()
plt.imshow([[1, 1] , [2, 2]], cmap = my_cmap) # cores= preto, preto, preto, azul.
cores = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 1]] my_cmap = ListedColormap(cores)
plt.figure()
plt.imshow([[1, 2] , [3, 4]], cmap = my_cmap)
(b) No interpretador, desenhe uma matriz com duas linhas (idˆenticas) e oito colunas (equivalente a uma lista de duas listas de dimens˜ao 8), pintando as colunas com a seguinte sequˆencia de cores: preto, vermelho, amarelo, verde, ciano, azul, magenta e branco.
0
1
2
3
4
5
6
7
0.5
0.0
0.5
1.0
1.5
(c) Dada uma cor definida por um terno RGB (vermelho, verde e azul), ´e poss´ıvel obter o tom de cinzento correspondente (c, c, c) atrav´es da seguinte f´ormula: c = 0.30 vermelho + 0.59 verde + 0.11 azul. Por exemplo, para o amarelo definido por (1, 1, 0) corresponde o tom de cinzento (0.89, 0.89, 0.89) porque 0.3 × 1 + 0.59 × 1 + 0.11 × 0 = 0.89.
Repita a al´ınea (b), pintando na segunda linha, abaixo de cada cor, o tom de cinzento correspondente.
Sugest˜ao: Defina duas fun¸c˜oes: i) a primeira fun¸c˜ao converte um terno RGB no tom de cinzento correspondente por recurso `a f´ormula dada; ii) a segunda fun¸c˜ao retorna a paleta com os tons de cinzento computados a partir de uma paleta de entrada.
0
1
2
3
4
5
6
7
0.5
0.0
0.5
1.0
1.5
Exerc´ıcio 3Relembre o exerc´ıcio 6 da Ficha Pr´atica No 2, onde calculou a magnitude de um sismo por recurso `
a formula emp´ırica de Lillie, a qual se reproduz seguidamente:
M = log10A + 1.6 log10d − 0.15
onde M ´e a magnitude (na escala de Richter), A ´e a amplitude das ondas s´ısmicas (em mil´ımetros) e d ´e a distˆancia ao epicentro (em km).
(a) Utilizando a instru¸c˜ao plot do matplotlib, desenhe um gr´afico da magnitude de um sismo registado no sism´ografo com uma amplitude de 8 mm, em fun¸c˜ao da distˆancia ao epicentro (avaliada entre os 10 km e os 200 km, em intervalos de 5 km).
(b) Desenhe um novo gr´afico, nas mesmas condi¸c˜oes da al´ınea (a), mas adicionando duas novas s´eries, correspondentes `as amplitudes de 16 e 32 mm. Utilize cores diferentes para representar cada s´erie.
Exerc´ıcio 4
Recorde o exerc´ıcio 1 da Ficha Pr´atica No4, onde foi medida a concentra¸c˜ao de chumbo no solo em v´arios pontos e a v´arias profundidades. Os dados recolhidos podem ser obtidos executando o ficheiro obtemConcentrPb.py e chamando a fun¸c˜ao obtemConcentrP b, fornecida anteriormente, que devolve uma lista da contamina¸c˜ao em Pb constitu´ıda por:
• uma primeira lista, com um n´umero de 1 a 20, que identifica o ponto de amostragem;
• uma segunda lista, com a profundidade da amostra, em cent´ımetros;
• uma terceira lista, com a concentra¸c˜ao de chumbo da amostra, em partes por milh˜ao.
H´a v´arias amostras por ponto, num total de 100 amostras em 20 pontos diferentes.
(a) Desenhe um gr´afico que, para cada ponto de amostragem, represente as concentra¸c˜oes de chumbo das amostras existentes na lista de contamina¸c˜ao (a diferentes profundidades).
(b) Desenhe um gr´afico de barras que mostre a concentra¸c˜ao m´edia de chumbo, observada no conjunto das profundidades analisadas, em cada ponto de amostragem. Nota: Considere que a m´edia ´e zero quando o n´umero de ocorrˆencias ´e zero.
(c) Desenhe um gr´afico de barras que mostre a concentra¸c˜ao m´edia de chumbo em cada ponto de amostragem, separando as amostras em duas categorias: amostras superficiais (profundidade ≤ 50 cm) e amostras profundas.