Skip to content

Instantly share code, notes, and snippets.

@JupyterJones
Last active April 26, 2020 01:28
Show Gist options
  • Save JupyterJones/c2fa42e8f78b943b64f7d7a4e4721c58 to your computer and use it in GitHub Desktop.
Save JupyterJones/c2fa42e8f78b943b64f7d7a4e4721c58 to your computer and use it in GitHub Desktop.
Draw-Covid-19-plot - state by state from current data Using https://github.com/CSSEGISandData/COVID-19 data
import random
from random import randint
import time
import markovify
import os
import sys
import sys
sys.path.insert(1, "/home/jack/hidden")
import Key
import twython
from twython import Twython
from PIL import Image, ImageChops, ImageDraw, ImageFont, ImageFilter
import warnings
warnings.filterwarnings("ignore")
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.pyplot import text
from matplotlib import pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
"""
When I tried to draw counties, I got error: basemap 'utf-8' codec can't decode byte 0xf1 in position
Answered on https://stackoverflow.com/questions/45660904/matplotlib-basemap-drawcounties-having-issues
Budi said, for me, i change return v.decode(encoding, encodingErrors) to return v.decode('latin-1') and it's works,, – Budi Mulyo May 27 '19 at 8:12
My file looked different than you described: so I opened /miniconda3/lib/python3.7/site-packages/shapefile.py and replaced all instances of 'utf-8' with 'latin-1' Itt works fine now.
Thank you very much. – JackNorthrup 3 mins ago
"""
def RndState():
TX=["Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"]
x=randint(1,49)
return TX[x]
LASTFILE="csse_covid_19_data/csse_covid_19_daily_reports/04-22-2020.csv"
#LASTFILE="csse_covid_19_data/csse_covid_19_daily_reports/03-30-2020.csv"
DataIn = open(LASTFILE).readlines()
LAT=[]
LONG=[]
STATES=[]
cases=[]
deaths =[]
longitude = ""
search = RndState()
for line in DataIn:
line=line.replace("\n","")
line = line.lstrip(",")
line = line.split(",")
if search in line[2] and "-" in (line[6]):
#print(line[2],line[1],line[3],line[4],line[5],line[6],line[7],line[8],line[9],line[10])
STATES.append(text)
LAT.append(line[5])
LONG.append(line[6])
cases.append(line[7])
deaths.append(line[8])
longitude = longitude+line[6]+","
print(len(STATES))
LT = np.array(LAT,dtype=np.float)
LG = np.array(LONG,dtype=np.float)
fig = plt.figure(num=None, figsize=(10,8), dpi=80, facecolor='salmon')
urcrnrlat=max(LT)+.5
llcrnrlat=min(LT)-.5
urcrnrlon=max(LG)+.8
llcrnrlon=min(LG)-.5
lat_0 = (urcrnrlat+llcrnrlat)/2
lon_0 =(urcrnrlon+llcrnrlon)/2
# make up some data for scatter plot
lats = LT
lons = LG
fig = plt.gcf()
fig.set_size_inches(8, 6.5)
m = Basemap(llcrnrlon,llcrnrlat,urcrnrlon,urcrnrlat,
resolution='i', projection='tmerc', lat_0 = lat_0, lon_0 = lon_0)
m.readshapefile(r'/home/jack/Desktop/state-data/state_bounds/state_bounds', 'Neighborhoods')
m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='#ddaa66',lake_color='aqua')
m.drawcoastlines()
m.drawrivers()
#m.drawcounties(linewidth=0.1, linestyle='solid', color='k', antialiased=1, facecolor='none', ax=None, zorder=None, drawbounds=False)
m.drawcounties(zorder=20)
S=1
Size=[]
for x in cases:
S=1+(float(x)*.5)
Size.append(int(S))
#print(int(S))
s = np.array(Size)
Sd=0
Sized=[]
for xd in deaths:
Sd=0+(float(xd))
Sized.append(int(Sd))
#print(int(S))
sd = np.array(Sized)
#print(Sized)
plt.text(max(LG-1.2),max(LT), search, color='white', fontsize=24)
x, y = m(lons, lats) # transform coordinates
plt.scatter(x, y, s=s, color="black", zorder=3)
plt.scatter(x, y, s=sd, color="red", zorder=6)
#plt.text(urcrnrlon,urcrnrlat, search, color='white', fontsize=24)
plt.savefig("BaseMap/"+search+"Counties__.png", dpi=120, facecolor='salmon', edgecolor='b',
orientation='portrait', papertype=None, format=None,
transparent=False, bbox_inches="tight", pad_inches=0.2,
frameon=None, metadata=None)
plt.show()
filename0 = "BaseMap/"+search+"Counties__.png"
def draw_blurred_back(img, position, text, font, col, halo_col):
halo = Image.new('RGBA', img.size, (0, 0, 0, 0))
ImageDraw.Draw(halo).text(position, text, font = font, fill = halo_col)
blurred_halo = halo.filter(ImageFilter.BLUR)
ImageDraw.Draw(blurred_halo).text(position, text, font = font, fill = col)
return Image.composite(img, blurred_halo, ImageChops.invert(blurred_halo))
if __name__ == '__main__':
basewidth = 720
inp = Image.open(filename0)
wpercent = (basewidth / float(inp.size[0]))
hsize = int((float(inp.size[1]) * float(wpercent)))
inp = inp.resize((basewidth, hsize), Image.ANTIALIAS)
#img.save(resized_image.jpg')
#inp = inp.resize((640,640), Image.ANTIALIAS)
font = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 30)
text_title = (255, 255,230) # bright green
blur_title = (0, 0, 0) # black
i2 = draw_blurred_back(inp, (15, 4), "Plotting COVID-19 Data", font, text_title, blur_title)
font0 = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 20)
font1 = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 14)
i2 = draw_blurred_back(i2, (15, 40), "Python Basemap "+search, font0, text_title, blur_title)
TXT="https://gist.github.com/JupyterJones/c2fa42e8f78b943b64f7d7a4e4721c58"
draw = ImageDraw.Draw(i2)
draw.text((15, 65), TXT, font = font1, align ="left",fill="black")
#i2 = draw(i2, (15, 65),TXT, font1)
#txt = Image.new('RGBA', i.size, (255,255,255,0))
# get a font
fnt = ImageFont.truetype("/home/jack/fonts/Exo-Black.ttf", 20)
# get a drawing context
signature_ = "@jacklnorthrup"
#get length in pixel of signature_
sizeS,ln = fnt.getsize(signature_)
#add 15 pixels to right border
pt = sizeS+25
width, height = inp.size
#marginx starting point of signature_
marginx = pt
#bottom margin
marginy = 30
x = width - marginx
y = height - marginy
text_sig = (255, 255,230) # bright green
blur_sig = (0, 0, 0) # black
txt=draw_blurred_back(i2,(x,y), signature_, fnt, text_sig, blur_sig)
out = Image.alpha_composite(i2, txt)
out.save("images/TEMP_POST.png")
PATH = "images/TEMP_POST.png"
CONSUMER_KEY = Key.twiter()[0]
CONSUMER_SECRET = Key.twiter()[1]
ACCESS_KEY = Key.twiter()[2]
ACCESS_SECRET = Key.twiter()[3]
twitter = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET)
STR = "#COVID-19 - #Python #"+search+" #Basemap Plot data using "+TXT+" #JupyterJones"
PATH = "images/TEMP_POST.png"
photo = open(PATH,'rb')
response = twitter.upload_media(media=photo)
twitter.update_status(status=STR, media_ids=[response['media_id']])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment