Display battery state of charge graphic on LCD

You could use the Createchar function.

This is my method for my bar graph.

// Simple LCD Bar Graph
// By: Andrew Mascolo 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
uint8_t bar0[8]  = {
  0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; 
uint8_t bar1[8]  = {
  0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};
uint8_t bar2[8]  = {
  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
uint8_t bar3[8]  = {
  0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};
uint8_t bar4[8]  = {
  0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E};
uint8_t bar5[8]  = {
  0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
int i,j=0, number=1;

LiquidCrystal_I2C lcd(0x20,20,4);  // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
  Serial.begin(9600);
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  lcd.createChar(0, bar0);
  lcd.createChar(1, bar1);
  lcd.createChar(2, bar2);
  lcd.createChar(3, bar3);
  lcd.createChar(4, bar4);
  lcd.createChar(5, bar5);
  lcd.home();
  lcd.print("Hello world...");
  delay(1000);
}

void loop()
{
  bargraph(analogRead(A6),1,20);
  //bargraph(analogRead(A6),3,20);
}

void bargraph(unsigned int data, unsigned int row, unsigned int lcd_size)
{ 
  j = map(data, 0, 1023, 0, (6 * lcd_size));
  if(number <= j)
  {
    for(number; number < j; number++)
    {
      i = number / 6;
      lcd.setCursor(i,row);
      lcd.write(number % 6);
    }
  }
  else 
  {
    for(number; number > j; number--)
    {
      i = number / 6;
      lcd.setCursor(i,row);
      lcd.write(number % 6);
    }
  }
  //Serial.print(number);
  // Serial.print(" ");
   //Serial.println(i);
}

You can modify it however you like.